logo

Java program kimenete | 5. készlet

Megjósolja a következő Java programok kimenetét.
1. program:  
 

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 

Kimenet :

String


Magyarázat : Abban az esetben módszer túlterhelése a fordításkor a legspecifikusabb módszert választják. Mivel a „java.lang.String” specifikusabb típus, mint a „java.lang.Object”. Ebben az esetben azt a metódust választjuk, amely a 'String'-et veszi paraméterként. 
2. program:  
 



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 

Kimenet:  
 

Compile Error at line 19.


Magyarázat: Ebben az esetben a módszer Túlterhelés a fordításkor a legspecifikusabb módszert választják. 
Mivel a „java.lang.String” és a „java.lang.Integer” egy konkrétabb típus, mint a „java.lang.Object”, de a „java.lang.String” és „java.lang.Integer” között egyik sem pontosabb. 
Ebben az esetben a Java nem tudja eldönteni, hogy melyik metódust hívja meg. 
3. program:  
 

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 

Kimenet: 
 

abcd abc false abcd abcd true


Magyarázat: Java-ban a String megváltoztathatatlan, a string puffer pedig változtatható. 
Tehát az s2 és s1 karakterlánc ugyanarra az abc karakterláncra mutat. És a változtatások elvégzése után az s1 karakterlánc az abcd-re, az s2 pedig az abc-re mutat, ezért false. A karakterlánc pufferben az sb1 és az sb2 is ugyanarra az objektumra mutat. Mivel a karakterlánc-puffer változtatható, az egyik karakterlánc módosítása a másik karakterláncot is módosítja. Tehát mindkét karakterlánc továbbra is ugyanarra az objektumra mutat az objektum módosítása után (itt sb2).
4. program:  
 

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 

Kimenet:  
 

Compile Error at line 8


Magyarázat:  
1. A 12. sorban A println-ben lévő '' karakterlánc hatására a számok automatikusan karakterláncként jelennek meg. Tehát nem összeadást végez, hanem karakterláncként fűzi össze. 
2. A 11. sorban a += automatikusan rövidre dob. Az 123456-os szám azonban nem szerepelhet rövidben, így negatív érték (-7616) lesz. 
(MEGJEGYZÉS - rövid 2 bájt -32768-32767) Itt az 123456 szám nem azt jelenti, hogy az int zit értéke az int érték hosszát mutatja 
3. A másik kettő vörös hering azonban, mivel a kód soha nem fog lefordítani a 8. sor miatt. 
Bármely nullával kezdődő szám oktális számként kezelendő (ami 0-7).
 

anaconda vs python kígyó