Ennusta seuraavien Java-ohjelmien tulos.
Ohjelma 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
Lähtö :
String
Selitys : Siinä tapauksessa menetelmän ylikuormitus tarkin menetelmä valitaan käännöshetkellä. Koska 'java.lang.String' on tarkempi tyyppi kuin 'java.lang.Object'. Tässä tapauksessa valitaan menetelmä, joka ottaa parametriksi "String".
Ohjelma 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
Lähtö:
Compile Error at line 19.
Selitys: Tässä tapauksessa menetelmä Ylikuormitus tarkin menetelmä valitaan käännöshetkellä.
Koska "java.lang.String" ja "java.lang.Integer" ovat tarkempi tyyppi kuin "java.lang.Object", mutta "java.lang.String" ja "java.lang.Integer" välillä ei ole tarkempaa.
Tässä tapauksessa Java ei pysty päättämään, mitä menetelmää kutsua.
Ohjelma 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
Lähtö:
abcd abc false abcd abcd true
Selitys: Javassa String on muuttumaton ja merkkijonopuskuri muuttuva.
Joten merkkijono s2 ja s1 osoittavat molemmat samaan merkkijonoon abc. Ja muutosten tekemisen jälkeen merkkijono s1 osoittaa abcd:lle ja s2 osoittaa abc:lle, joten se on epätosi. Merkkijonopuskurissa sekä sb1 että sb2 osoittavat molemmat samaan objektiin. Koska merkkijonopuskurit ovat muutettavissa, yhden merkkijonon muutokset tekevät muutoksia myös toiseen merkkijonoon. Joten molemmat merkkijonot osoittavat edelleen samaan objektiin objektiin tehtyjen muutosten jälkeen (tässä sb2).
Ohjelma 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
Lähtö:
Compile Error at line 8
Selitys:
1. Rivillä 12 Println:n ''-merkki saa numerot valettua automaattisesti merkkijonoina. Joten se ei tee summaa, vaan liittää yhteen merkkijonona.
2. Linjassa 11 += tekee automaattisen heiton lyhyeksi. Numeroa 123456 ei kuitenkaan voida sisällyttää lyhyeen, joten saat negatiivisen arvon (-7616).
(HUOM - lyhyt 2 tavua -32768 - 32767) Tässä numero 123456 ei tarkoita, että int zit:n arvo näyttää int-arvon pituuden
3. Nuo kaksi muuta ovat punaisia silakkaa, koska koodia ei koskaan käännetä rivin 8 vuoksi.
Mitä tahansa nollalla alkavaa lukua käsitellään oktaalilukuna (joka on 0-7).
kuinka muuntaa int:stä merkkijonoksi javassa