Ieșirea programului Java | Setul 5

Preziceți rezultatul următoarelor programe Java.
Programul 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   

Ieșire :

String 


Explicaţie : În cazul supraîncărcarea metodei cea mai specifică metodă este aleasă în timpul compilării. Deoarece „java.lang.String” este un tip mai specific decât „java.lang.Object”. În acest caz, este aleasă metoda care ia „String” ca parametru. 
Programul 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   

Ieșire:  
 

Compile Error at line 19. 


Explicaţie: În acest caz de metoda Supraîncărcare cea mai specifică metodă este aleasă în timpul compilării. 
Deoarece „java.lang.String” și „java.lang.Integer” este un tip mai specific decât „java.lang.Object”, dar între „java.lang.String” și „java.lang.Integer” niciunul nu este mai specific. 
În acest caz, Java nu poate decide ce metodă să apeleze. 
Programul 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   

Ieșire: 
 

abcd abc false abcd abcd true 


Explicatie: În Java String este imuabil, iar string buffer este mutabil. 
Deci șirul s2 și s1 indicând ambele către același șir abc. Și după efectuarea modificărilor, șirul s1 indică abcd și s2 indică abc, deci fals. În timp ce se află în string buffer, ambele sb1 și sb2 indică același obiect. Deoarece string buffer sunt modificabile, efectuând modificări într-un șir, faceți modificări și în celălalt șir. Deci ambele șiruri indică în continuare către același obiect după ce au făcut modificări la obiect (aici sb2).
Programul 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   

Ieșire:  
 

Compile Error at line 8 


Explicaţie:  
1. În rândul 12 „” din println face ca numerele să fie automat turnate ca șiruri. Deci nu face adunări, ci se adaugă împreună ca șir. 
2. În Linia 11, += face o distribuție automată la un scurt. Cu toate acestea, numărul 123456 nu poate fi conținut într-un scurt, așa că ajungeți cu o valoare negativă (-7616). 
(NOTĂ - scurt 2 octeți -32768 la 32767) Aici numărul 123456 nu înseamnă că Valoarea int zit arată lungimea valorii int 
3. Celelalte două sunt totuși, deoarece codul nu se va compila niciodată din cauza liniei 8. 
Orice număr care începe cu zero este tratat ca un număr octal (care este 0-7).
 

Creați un test