logo

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).
 

classificando tuplas python