Predpovedajte výstup nasledujúcich 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
Výstup :
String
Vysvetlenie : V prípade preťaženie metódy najšpecifickejšia metóda sa vyberie v čase kompilácie. Keďže „java.lang.String“ je špecifickejší typ ako „java.lang.Object“. V tomto prípade sa zvolí metóda, ktorá berie ako parameter 'String'.
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
výstup:
Compile Error at line 19.
Vysvetlenie: V tomto prípade metóda Preťaženie najšpecifickejšia metóda sa vyberie v čase kompilácie.
Keďže „java.lang.String“ a „java.lang.Integer“ je špecifickejší typ ako „java.lang.Object“, ale medzi „java.lang.String“ a „java.lang.Integer“ žiadny nie je konkrétnejší.
V tomto prípade sa Java nedokáže rozhodnúť, ktorú metódu zavolať.
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
výstup:
abcd abc false abcd abcd true
vysvetlenie: V jazyku Java je reťazec nemenný a vyrovnávacia pamäť reťazcov je meniteľná.
Takže reťazce s2 a s1 ukazujú na rovnaký reťazec abc. A po vykonaní zmien reťazec s1 ukazuje na abcd a s2 ukazuje na abc, teda false. Zatiaľ čo v reťazci sb1 aj sb2 ukazujú na rovnaký objekt. Keďže vyrovnávacia pamäť reťazcov je premenlivá, vykonávaním zmien v jednom reťazci vykonajte zmeny aj v druhom reťazci. Takže oba reťazce stále ukazujú na rovnaký objekt po vykonaní zmien v objekte (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
výstup:
Compile Error at line 8
Vysvetlenie:
1. V riadku 12 Znak '' v println spôsobí, že čísla sa automaticky pretypujú ako reťazce. Nerobí teda sčítanie, ale spája sa ako reťazec.
2. V riadku 11 += vykoná automatické vrhnutie na skrat. Avšak číslo 123456 nemôže byť obsiahnuté v skratke, takže skončíte so zápornou hodnotou (-7616).
(POZNÁMKA - krátke 2 bajty -32768 až 32767) Tu číslo 123456 neznamená, že hodnota int zit ukazuje dĺžku hodnoty int
3. Títo ďalší dvaja sú však červené slede, pretože kód sa nikdy neskompiluje kvôli riadku 8.
Akékoľvek číslo začínajúce nulou sa považuje za osmičkové číslo (čo je 0-7).
sql poradie podľa dátumu