Saída do programa Java | Conjunto 5
Preveja a saída dos seguintes programas Java.
Programa 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
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:
// 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:
// 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:
// 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).