Förutsäg resultatet av följande Java-program.
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
Produktion :
String
Förklaring : I fallet med metodöverbelastning den mest specifika metoden väljs vid kompilering. Eftersom 'java.lang.String' är en mer specifik typ än 'java.lang.Object'. I detta fall väljs metoden som tar 'String' som 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
Produktion:
Compile Error at line 19.
Förklaring: I detta fall av metod Överbelastning den mest specifika metoden väljs vid kompilering.
Eftersom 'java.lang.String' och 'java.lang.Integer' är en mer specifik typ än 'java.lang.Object' men mellan 'java.lang.String' och 'java.lang.Integer' är ingen mer specifik.
I det här fallet kan Java inte bestämma vilken metod som ska anropas.
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
Produktion:
abcd abc false abcd abcd true
Förklaring: I Java är sträng oföränderlig och strängbuffert är föränderlig.
Så sträng s2 och s1 pekar båda på samma sträng abc. Och efter att ha gjort ändringarna pekar strängen s1 på abcd och s2 pekar på abc, alltså false. I strängbuffert pekar både sb1 och sb2 på samma objekt. Eftersom strängbuffertar är föränderliga gör ändringar i en sträng också ändringar i den andra strängen. Så båda strängarna pekar fortfarande på samma objekt efter att ha gjort ändringarna i objektet (här 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
Produktion:
Compile Error at line 8
Förklaring:
1. På rad 12 '' i println gör att siffrorna automatiskt kastas som strängar. Så det gör inte addition utan lägger ihop som en sträng.
2. I Line11 gör += ett automatiskt kast till en kort. Däremot kan numret 123456 inte finnas i en kortslutning så du får ett negativt värde (-7616).
(OBS - korta 2 byte -32768 till 32767) Här betyder siffran 123456 inte att värdet på int zit visar längden på int-värdet
3. De andra två är dock röda strömming eftersom koden aldrig kommer att kompileras på grund av rad 8.
Alla tal som börjar med noll behandlas som ett oktalt tal (vilket är 0-7).
vyer och tabeller