Saída do programa Java | Conjunto 5

Preveja a saída dos seguintes programas Java.
Programa 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   

Saída :

String 


Explicação : No caso de sobrecarga de método o método mais específico é escolhido em tempo de compilação. Como 'java.lang.String' é um tipo mais específico que 'java.lang.Object'. Neste caso é escolhido o método que leva 'String' como parâmetro. 
Programa 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   

Saída:  
 

Compile Error at line 19. 


Explicação: Neste caso de método Sobrecarga o método mais específico é escolhido em tempo de compilação. 
Como 'java.lang.String' e 'java.lang.Integer' é um tipo mais específico que 'java.lang.Object', mas entre 'java.lang.String' e 'java.lang.Integer' nenhum é mais específico. 
Neste caso, o Java não consegue decidir qual método chamar. 
Programa 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   

Saída: 
 

abcd abc false abcd abcd true 


Explicação: Em Java, String é imutável e buffer de string é mutável. 
Portanto, as strings s2 e s1 apontam para a mesma string abc. E depois de fazer as alterações, a string s1 aponta para abcd e s2 aponta para abc, portanto, falsa. Enquanto estão no buffer de string, sb1 e sb2 apontam para o mesmo objeto. Como o buffer de string é mutável, fazer alterações em uma string também faz alterações na outra string. Portanto, ambas as strings ainda apontam para o mesmo objeto após fazer as alterações no objeto (aqui sb2).
Programa 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   

Saída:  
 

Compile Error at line 8 


Explicação:  
1. Na Linha 12 O '' no println faz com que os números sejam automaticamente convertidos em strings. Portanto, ele não faz adição, mas anexa como string. 
2. Na Linha 11, o += faz uma conversão automática para um short. No entanto, o número 123456 não pode estar contido em um short, então você acaba com um valor negativo (-7616). 
(NOTA - 2 bytes curtos -32768 a 32767) Aqui o número 123456 não significa que o valor de int zit mostra o comprimento do valor int 
3. Esses outros dois são pistas falsas, pois o código nunca será compilado devido à linha 8. 
Qualquer número que comece com zero é tratado como um número octal (que é de 0 a 7).
 

Criar questionário