logo

Output del programma Java | Insieme 5

Prevedere l'output dei seguenti programmi Java.
Programma 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 

Produzione :

String


Spiegazione : In caso di sovraccarico del metodo il metodo più specifico viene scelto in fase di compilazione. Poiché "java.lang.String" è un tipo più specifico di "java.lang.Object". In questo caso viene scelto il metodo che accetta 'String' come parametro. 
Programma 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 

Produzione:  
 

Compile Error at line 19.


Spiegazione: In questo caso di metodo Sovraccarico il metodo più specifico viene scelto in fase di compilazione. 
Poiché "java.lang.String" e "java.lang.Integer" sono un tipo più specifico di "java.lang.Object", ma tra "java.lang.String" e "java.lang.Integer" nessuno è più specifico. 
In questo caso Java non è in grado di decidere quale metodo chiamare. 
Programma 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 

Produzione: 
 

abcd abc false abcd abcd true


Spiegazione: In Java la stringa è immutabile e il buffer della stringa è mutabile. 
Quindi le stringhe s2 e s1 puntano entrambe alla stessa stringa abc. E dopo aver apportato le modifiche, la stringa s1 punta ad abcd e s2 punta ad abc quindi falsa. Mentre nel buffer di stringa sia sb1 che sb2 puntano entrambi allo stesso oggetto. Poiché i buffer delle stringhe sono modificabili, le modifiche in una stringa apportano modifiche anche all'altra stringa. Quindi entrambe le stringhe puntano ancora allo stesso oggetto dopo aver apportato le modifiche all'oggetto (qui sb2).
Programma 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 

Produzione:  
 

Compile Error at line 8


Spiegazione:  
1. Nella riga 12 Il '' nel println fa sì che i numeri vengano automaticamente espressi come stringhe. Quindi non esegue addizioni ma si aggiunge insieme come stringa. 
2. Nella riga 11 += esegue un cast automatico su un corto. Tuttavia il numero 123456 non può essere contenuto in uno short quindi ti ritroverai con un valore negativo (-7616). 
(NOTA - 2 byte brevi da -32768 a 32767) Qui il numero 123456 non significa il valore di int zit mostra la lunghezza del valore int 
3. Tuttavia, gli altri due sono false piste poiché il codice non verrà mai compilato a causa della riga 8. 
Qualsiasi numero che inizia con zero viene trattato come un numero ottale (ovvero 0-7).
 

funzione anonima Java