Java program kimenete | 5. készlet
Megjósolja a következő Java programok kimenetét.
1. program:
// 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:
// 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:
// 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:
// 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).