logo

Výstup programu Java | Sada 5

Předvídejte výstup následujících programů Java.
Program 1:  
 

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 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:  
 

Java
// 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:  
 

Java
// 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