logo

Output af Java-program | Sæt 5

Forudsige outputtet af 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 

Produktion :

String


Forklaring : I tilfælde af metode overbelastning den mest specifikke metode vælges på kompileringstidspunktet. Da 'java.lang.String' er en mere specifik type end 'java.lang.Object'. I dette tilfælde vælges metoden, der tager '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 

Produktion:  
 

Compile Error at line 19.


Forklaring: I dette tilfælde af metode Overbelastning den mest specifikke metode vælges på kompileringstidspunktet. 
Da 'java.lang.String' og 'java.lang.Integer' er en mere specifik type end 'java.lang.Object', men mellem 'java.lang.String' og 'java.lang.Integer' er ingen mere specifik. 
I dette tilfælde er Java ikke i stand til at bestemme, hvilken metode der skal kaldes. 
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 

Produktion: 
 

abcd abc false abcd abcd true


Forklaring: I Java er streng uforanderlig, og strengbuffer kan ændres. 
Så streng s2 og s1 peger begge på den samme streng abc. Og efter at have foretaget ændringerne, peger strengen s1 på abcd og s2 peger på abc, derfor falsk. Mens der er i strengbuffer, peger både sb1 og sb2 på det samme objekt. Da strengbuffer kan ændres, foretager ændringer i en streng også ændringer i den anden streng. Så begge strenge peger stadig på det samme objekt efter at have foretaget ændringerne til 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 

Produktion:  
 

Compile Error at line 8


Forklaring:  
1. I linje 12 '' i println bevirker, at tallene automatisk castes som strenge. Så den tilføjer ikke, men føjes sammen som en streng. 
2. I Line11 laver += en automatisk cast til en kort. Tallet 123456 kan dog ikke være indeholdt i en short, så du ender med en negativ værdi (-7616). 
(BEMÆRK - kort 2 bytes -32768 til 32767) Her betyder tallet 123456 ikke, at værdien af ​​int zit viser længden af ​​int-værdien 
3. De to andre er dog røde sild, da koden aldrig vil kompilere på grund af linje 8. 
Ethvert tal, der begynder med nul, behandles som et oktalt tal (som er 0-7).
 

karakter.sammenlign java