Sagen Sie die Ausgabe der folgenden Java-Programme voraus.
Programm 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
Ausgabe :
String
Erläuterung : Im Falle von Methodenüberladung Die spezifischste Methode wird zur Kompilierzeit ausgewählt. Da „java.lang.String“ ein spezifischerer Typ ist als „java.lang.Object“. In diesem Fall wird die Methode ausgewählt, die „String“ als Parameter akzeptiert.
Programm 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
Ausgabe:
Compile Error at line 19.
Erläuterung: In diesem Fall von Methode Überladung Die spezifischste Methode wird zur Kompilierzeit ausgewählt.
Da „java.lang.String“ und „java.lang.Integer“ ein spezifischerer Typ als „java.lang.Object“ sind, ist zwischen „java.lang.String“ und „java.lang.Integer“ keiner spezifischer.
In diesem Fall kann Java nicht entscheiden, welche Methode aufgerufen werden soll.
Programm 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
Ausgabe:
abcd abc false abcd abcd true
Erläuterung : In Java ist String unveränderlich und String-Puffer veränderbar.
Die Zeichenfolgen s2 und s1 zeigen also beide auf dieselbe Zeichenfolge abc. Und nachdem die Änderungen vorgenommen wurden, zeigt die Zeichenfolge s1 auf abcd und s2 auf abc, also falsch. Im String-Puffer verweisen sowohl sb1 als auch sb2 auf dasselbe Objekt. Da String-Puffer veränderbar sind, führen Änderungen in einem String auch zu Änderungen am anderen String. Beide Zeichenfolgen zeigen also immer noch auf dasselbe Objekt, nachdem die Änderungen am Objekt vorgenommen wurden (hier sb2).
Programm 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
Ausgabe:
Compile Error at line 8
Erläuterung:
1. In Zeile 12 bewirkt das '' im println, dass die Zahlen automatisch in Zeichenfolgen umgewandelt werden. Es erfolgt also keine Addition, sondern das Anhängen als String.
2. In Zeile 11 führt += eine automatische Umwandlung in einen Short durch. Allerdings darf die Zahl 123456 nicht in einem Kurzschluss enthalten sein, sodass Sie am Ende einen negativen Wert (-7616) erhalten.
(HINWEIS – kurze 2 Bytes -32768 bis 32767) Hier bedeutet die Zahl 123456 nicht, dass der Wert von int zit die Länge des int-Werts angibt
3. Die anderen beiden sind jedoch Ablenkungsmanöver, da der Code aufgrund von Zeile 8 nie kompiliert werden kann.
Jede Zahl, die mit Null beginnt, wird als Oktalzahl (also zwischen 0 und 7) behandelt.
ist eine Beziehung