logo

Utgang av Java-program | Sett 5

Forutsi produksjonen av følgende Java-programmer.
Program 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 

Produksjon :

String


Forklaring : I tilfelle av metode overbelastning den mest spesifikke metoden velges ved kompilering. Siden 'java.lang.String' er en mer spesifikk type enn 'java.lang.Object'. I dette tilfellet velges metoden som tar 'String' som parameter. 
Program 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 

Produksjon:  
 

Compile Error at line 19.


Forklaring: I dette tilfellet av metode Overbelastning den mest spesifikke metoden velges ved kompilering. 
Siden 'java.lang.String' og 'java.lang.Integer' er en mer spesifikk type enn 'java.lang.Object', men mellom 'java.lang.String' og 'java.lang.Integer' er ingen mer spesifikk. 
I dette tilfellet er ikke Java i stand til å bestemme hvilken metode som skal kalles. 
Program 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 

Produksjon: 
 

abcd abc false abcd abcd true


Forklaring: I Java er streng uforanderlig og strengbuffer kan endres. 
Så streng s2 og s1 peker begge til samme streng abc. Og etter å ha gjort endringene peker strengen s1 til abcd og s2 peker på abc, derav usant. Mens i strengbuffer peker både sb1 og sb2 til det samme objektet. Siden strengbuffer kan endres, gjør endringer i en streng også endringer i den andre strengen. Så begge strengene peker fortsatt til det samme objektet etter å ha gjort endringene i objektet (her sb2).
Program 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 

Produksjon:  
 

Compile Error at line 8


Forklaring:  
1. På linje 12 '' i println fører til at tallene automatisk kastes som strenger. Så den legger ikke til, men legger sammen som en streng. 
2. I Line11 kaster += automatisk til en kortfilm. Tallet 123456 kan imidlertid ikke inneholdes i en short, så du ender opp med en negativ verdi (-7616). 
(MERK - kort 2 byte -32768 til 32767) Her betyr ikke tallet 123456 at verdien av int zit viser lengden på int-verdien 
3. De to andre er røde sild, men siden koden aldri vil kompileres på grunn av linje 8. 
Ethvert tall som begynner med null, behandles som et oktalt tall (som er 0-7).
 

gimp sletter bakgrunn