Výstup programu Java | Set 5

Predpovedajte výstup nasledujúcich programov Java.
Program 1:  
 

Java
   // Main.java   public     class   Main   {      public     static     void     gfg  (  String     s  )      {         System  .  out  .  println  (  'String'  );      }      public     static     void     gfg  (  Object     o  )      {      System  .  out  .  println  (  'Object'  );      }      public     static     void     main  (  String     args  []  )      {      gfg  (  null  );      }   }     //end class   

Výstup :

String 


Vysvetlenie : V prípade preťaženie metódy najšpecifickejšia metóda sa vyberie v čase kompilácie. Keďže „java.lang.String“ je špecifickejší typ ako „java.lang.Object“. V tomto prípade sa zvolí metóda, ktorá berie ako parameter 'String'. 
Program 2:  
 

Java
   // Main.java   public     class   Main   {      public     static     void     gfg  (  String     s  )      {         System  .  out  .  println  (  'String'  );      }      public     static     void     gfg  (  Object     o  )      {      System  .  out  .  println  (  'Object'  );      }      public     static     void     gfg  (  Integer     i  )      {      System  .  out  .  println  (  'Integer'  );      }      public     static     void     main  (  String     args  []  )      {      gfg  (  null  );      }   }     //end class   

výstup:  
 

Compile Error at line 19. 


Vysvetlenie: V tomto prípade metóda Preťaženie najšpecifickejšia metóda sa vyberie v čase kompilácie. 
Keďže „java.lang.String“ a „java.lang.Integer“ je špecifickejší typ ako „java.lang.Object“, ale medzi „java.lang.String“ a „java.lang.Integer“ žiadny nie je konkrétnejší. 
V tomto prípade sa Java nedokáže rozhodnúť, ktorú metódu zavolať. 
Program 3:  
 

Java
   // Main.java   public     class   Main   {      public     static     void     main  (  String     args  []  )      {      String     s1     =     'abc'  ;      String     s2     =     s1  ;      s1     +=     'd'  ;      System  .  out  .  println  (  s1     +     ' '     +     s2     +     ' '     +     (  s1     ==     s2  ));      StringBuffer     sb1     =     new     StringBuffer  (  'abc'  );      StringBuffer     sb2     =     sb1  ;      sb1  .  append  (  'd'  );      System  .  out  .  println  (  sb1     +     ' '     +     sb2     +     ' '     +     (  sb1     ==     sb2  ));      }   }     //end class   

výstup: 
 

abcd abc false abcd abcd true 


vysvetlenie: V jazyku Java je reťazec nemenný a vyrovnávacia pamäť reťazcov je meniteľná. 
Takže reťazce s2 a s1 ukazujú na rovnaký reťazec abc. A po vykonaní zmien reťazec s1 ukazuje na abcd a s2 ukazuje na abc, teda false. Zatiaľ čo v reťazci sb1 aj sb2 ukazujú na rovnaký objekt. Keďže vyrovnávacia pamäť reťazcov je premenlivá, vykonávaním zmien v jednom reťazci vykonajte zmeny aj v druhom reťazci. Takže oba reťazce stále ukazujú na rovnaký objekt po vykonaní zmien v objekte (tu sb2).
Program 4:  
 

Java
   // Main.java   public     class   Main   {      public     static     void     main  (  String     args  []  )      {      short     s     =     0  ;      int     x     =     07  ;      int     y     =     08  ;      int     z     =     112345  ;      s     +=     z  ;      System  .  out  .  println  (  ''     +     x     +     y     +     s  );      }   }     //end class   

výstup:  
 

Compile Error at line 8 


Vysvetlenie:  
1. V riadku 12 Znak '' v println spôsobí, že čísla sa automaticky pretypujú ako reťazce. Nerobí teda sčítanie, ale spája sa ako reťazec. 
2. V riadku 11 += vykoná automatické vrhnutie na skrat. Avšak číslo 123456 nemôže byť obsiahnuté v skratke, takže skončíte so zápornou hodnotou (-7616). 
(POZNÁMKA - krátke 2 bajty -32768 až 32767) Tu číslo 123456 neznamená, že hodnota int zit ukazuje dĺžku hodnoty int 
3. Títo ďalší dvaja sú však červené slede, pretože kód sa nikdy neskompiluje kvôli riadku 8. 
Akékoľvek číslo začínajúce nulou sa považuje za osmičkové číslo (čo je 0-7).
 

Vytvoriť kvíz