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 však č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).
 

Vytvořit kvíz