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:
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:
// 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).
anaconda vs python kígyó