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:
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:
// 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).
classificando tuplas python