Izhod programa Java | Set 5

Predvidi izhod naslednjih 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   

Izhod :

String 


Razlaga : V primeru preobremenitev metode najbolj specifična metoda je izbrana v času prevajanja. Ker je 'java.lang.String' bolj specifičen tip kot 'java.lang.Object'. V tem primeru je izbrana metoda, ki vzame 'String' kot parameter. 
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   

Izhod:  
 

Compile Error at line 19. 


Pojasnilo: V tem primeru metoda Preobremenitev najbolj specifična metoda je izbrana v času prevajanja. 
Ker sta 'java.lang.String' in 'java.lang.Integer' bolj specifična tipa kot 'java.lang.Object', toda med 'java.lang.String' in 'java.lang.Integer' noben ni bolj specifičen. 
V tem primeru se Java ne more odločiti, katero metodo naj pokliče. 
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   

Izhod: 
 

abcd abc false abcd abcd true 


Pojasnilo: V Javi je niz nespremenljiv in medpomnilnik nizov je spremenljiv. 
Torej niza s2 in s1 kažeta na isti niz abc. In po izvedbi sprememb niz s1 kaže na abcd in s2 kaže na abc, torej false. Medtem ko sta v medpomnilniku nizov tako sb1 kot sb2 oba kazala na isti objekt. Ker je vmesni pomnilnik nizov spremenljiv, spreminjanje enega niza spreminja tudi drugi niz. Torej oba niza še vedno kažeta na isti predmet po spremembah predmeta (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   

Izhod:  
 

Compile Error at line 8 


Pojasnilo:  
1. V 12. vrstici '' v println povzroči, da se števila samodejno pretvorijo v nize. Torej ne izvaja seštevanja, ampak doda skupaj kot niz. 
2. V vrstici 11 += naredi samodejno pretvorbo v kratko. Vendar števila 123456 ni mogoče vsebovati v kratkem nizu, tako da na koncu dobite negativno vrednost (-7616). 
(OPOMBA - kratka 2 bajta od -32768 do 32767) Tukaj številka 123456 ne pomeni, da vrednost int zit prikazuje dolžino vrednosti int 
3. Ta druga dva sta rdeča sleda, ker se koda zaradi vrstice 8 ne bo nikoli prevedla. 
Vsako število, ki se začne z ničlo, se obravnava kot osmiško število (kar je 0-7).
 

Ustvari kviz