Předvídejte výstup následujících programů 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
Vysvětlení : V případě přetížení metody nejkonkrétnější metoda je vybrána v době kompilace. Protože 'java.lang.String' je specifičtější typ než 'java.lang.Object'. V tomto případě je zvolena metoda, která bere jako parametr '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.
Vysvětlení: V tomto případě metoda Přetížení nejkonkrétnější metoda je vybrána v době kompilace.
Protože 'java.lang.String' a 'java.lang.Integer' je specifičtější typ než 'java.lang.Object', ale mezi 'java.lang.String' a 'java.lang.Integer' žádný není konkrétnější.
V tomto případě se Java nemůže rozhodnout, kterou metodu zavolat.
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
Vysvětlení: V Javě je řetězec neměnný a vyrovnávací paměť řetězce je proměnlivá.
Takže řetězec s2 a s1 oba ukazují na stejný řetězec abc. A po provedení změn řetězec s1 ukazuje na abcd a s2 ukazuje na abc, tedy false. Zatímco v řetězcové vyrovnávací paměti oba sb1 a sb2 ukazují na stejný objekt. Vzhledem k tomu, že vyrovnávací paměť řetězců je proměnlivá, provádějte změny v jednom řetězci také ve druhém řetězci. Takže oba řetězce stále ukazují na stejný objekt po provedení změn v objektu (zde 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
Vysvětlení:
1. Na řádku 12 Znak '' v println způsobí, že čísla budou automaticky přetypována jako řetězce. Takže neprovádí sčítání, ale připojuje se jako řetězec.
2. V řádku 11 += provede automatické přehození na zkrat. Číslo 123456 však nemůže být obsaženo v shortu, takže skončíte se zápornou hodnotou (-7616).
(POZNÁMKA - krátké 2 bajty -32768 až 32767) Zde číslo 123456 neznamená, že hodnota int zit ukazuje délku hodnoty int
3. Ti další dva jsou červení sledi, protože kód se kvůli řádku 8 nikdy nezkompiluje.
Jakékoli číslo začínající nulou je považováno za osmičkové číslo (což je 0-7).
sql pořadí podle data