logo

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).
 

tableau de retour Java