Predvidi izhod naslednjih programov Java.
Program 1:
// 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
Izhod :
String
Razlaga : V primeru preobremenitev metode najbolj specifična metoda je izbrana v času prevajanja. Ker je 'java.lang.String' bolj specifičen tip kot 'java.lang.Object'. V tem primeru je izbrana metoda, ki vzame 'String' kot 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
Izhod:
Compile Error at line 19.
Pojasnilo: V tem primeru metoda Preobremenitev najbolj specifična metoda je izbrana v času prevajanja.
Ker sta 'java.lang.String' in 'java.lang.Integer' bolj specifična tipa kot 'java.lang.Object', toda med 'java.lang.String' in 'java.lang.Integer' noben ni bolj specifičen.
V tem primeru se Java ne more odločiti, katero metodo naj pokliče.
Program 3:
// 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
Izhod:
abcd abc false abcd abcd true
Pojasnilo: V Javi je niz nespremenljiv in medpomnilnik nizov je spremenljiv.
Torej niza s2 in s1 kažeta na isti niz abc. In po izvedbi sprememb niz s1 kaže na abcd in s2 kaže na abc, torej false. Medtem ko sta v medpomnilniku nizov tako sb1 kot sb2 oba kazala na isti objekt. Ker je vmesni pomnilnik nizov spremenljiv, spreminjanje enega niza spreminja tudi drugi niz. Torej oba niza še vedno kažeta na isti predmet po spremembah predmeta (tu sb2).
Program 4:
// 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
Izhod:
Compile Error at line 8
Pojasnilo:
1. V 12. vrstici '' v println povzroči, da se števila samodejno pretvorijo v nize. Torej ne izvaja seštevanja, ampak doda skupaj kot niz.
2. V vrstici 11 += naredi samodejno pretvorbo v kratko. Vendar števila 123456 ni mogoče vsebovati v kratkem nizu, tako da na koncu dobite negativno vrednost (-7616).
(OPOMBA - kratka 2 bajta od -32768 do 32767) Tukaj številka 123456 ne pomeni, da vrednost int zit prikazuje dolžino vrednosti int
3. Ta druga dva sta rdeča sleda, ker se koda zaradi vrstice 8 ne bo nikoli prevedla.
Vsako število, ki se začne z ničlo, se obravnava kot osmiško število (kar je 0-7).
line ukaz autocad