Sortie du programme Java | Ensemble 5

Prédisez la sortie des programmes Java suivants.
Programme 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   

Sortir :

String 


Explication : En cas de surcharge de méthode la méthode la plus spécifique est choisie au moment de la compilation. Comme 'java.lang.String' est un type plus spécifique que 'java.lang.Object'. Dans ce cas, la méthode qui prend 'String' comme paramètre est choisie. 
Programme 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   

Sortir:  
 

Compile Error at line 19. 


Explication: Dans ce cas de méthode Surcharge la méthode la plus spécifique est choisie au moment de la compilation. 
Comme « java.lang.String » et « java.lang.Integer » sont un type plus spécifique que « java.lang.Object », mais entre « java.lang.String » et « java.lang.Integer », aucun n'est plus spécifique. 
Dans ce cas, Java est incapable de décider quelle méthode appeler. 
Programme 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   

Sortir: 
 

abcd abc false abcd abcd true 


Explication : En Java, la chaîne est immuable et le tampon de chaîne est mutable. 
Ainsi, les chaînes s2 et s1 pointent toutes deux vers la même chaîne abc. Et après avoir apporté les modifications, la chaîne s1 pointe vers abcd et s2 pointe vers abc donc false. Dans le tampon de chaîne, sb1 et sb2 pointent tous deux vers le même objet. Étant donné que le tampon de chaîne est mutable, les modifications apportées à une chaîne apportent également des modifications à l'autre chaîne. Ainsi, les deux chaînes pointent toujours vers le même objet après avoir apporté les modifications à l'objet (ici sb2).
Programme 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   

Sortir:  
 

Compile Error at line 8 


Explication:  
1. À la ligne 12, le '' dans println entraîne la conversion automatique des nombres sous forme de chaînes. Donc, il ne fait pas d'addition mais s'ajoute sous forme de chaîne. 
2. Dans Line11, le += effectue une conversion automatique en court-métrage. Cependant, le nombre 123456 ne peut pas être contenu dans un short, vous vous retrouvez donc avec une valeur négative (-7616). 
(REMARQUE - 2 octets courts -32768 à 32767) Ici, le nombre 123456 ne signifie pas que la valeur de int zit montre la longueur de la valeur int 
3. Ces deux autres sont cependant des harengs rouges car le code ne sera jamais compilé à cause de la ligne 8. 
Tout nombre commençant par zéro est traité comme un nombre octal (qui va de 0 à 7).