Sortida del programa Java | Set 5

Prediu la sortida dels següents programes Java.
Programa 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   

Sortida :

String 


Explicació : En cas de sobrecàrrega del mètode el mètode més específic s'escull en temps de compilació. Com que 'java.lang.String' és un tipus més específic que 'java.lang.Object'. En aquest cas s'escull el mètode que pren 'String' com a paràmetre. 
Programa 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   

Sortida:  
 

Compile Error at line 19. 


Explicació: En aquest cas de Sobrecàrrega del mètode el mètode més específic s'escull en temps de compilació. 
Com que "java.lang.String" i "java.lang.Integer" és un tipus més específic que "java.lang.Object", però entre "java.lang.String" i "java.lang.Integer" cap és més específic. 
En aquest cas, Java no pot decidir quin mètode cridar. 
Programa 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   

Sortida: 
 

abcd abc false abcd abcd true 


Explicació: A Java, la cadena és immutable i la memòria intermèdia és mutable. 
Així que la cadena s2 i s1 apunten a la mateixa cadena abc. I després de fer els canvis, la cadena s1 apunta a abcd i s2 apunta a abc, per tant, fals. Mentre es troben al buffer de cadena, tant sb1 com sb2 apunten al mateix objecte. Com que la memòria intermèdia de cadena és mutable, fent canvis en una cadena també es fan canvis a l'altra cadena. Així, ambdues cadenes continuen apuntant al mateix objecte després de fer els canvis a l'objecte (aquí sb2).
Programa 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   

Sortida:  
 

Compile Error at line 8 


Explicació:  
1. A la línia 12, la '' a println fa que els números s'emetin automàticament com a cadenes. Per tant, no fa una suma sinó que s'afegeix com a cadena. 
2. A la línia 11, el += fa un llançament automàtic a un curt. Tanmateix, el número 123456 no es pot contenir en un curt, de manera que acabeu amb un valor negatiu (-7616). 
(NOTA: 2 bytes curts -32768 a 32767) Aquí el número 123456 no vol dir que el valor de int zit mostra la longitud del valor int 
3. Els altres dos són, però, ja que el codi no es compilarà mai a causa de la línia 8. 
Qualsevol nombre que comenci per zero es tracta com un nombre octal (que és 0-7).
 

Crea un qüestionari