Prediga la salida de los siguientes 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
Salida :
String
Explicación : en caso de sobrecarga de métodos , se elige el método más específico en el momento de la compilación. Como ‘java.lang.String’ es un tipo más específico que ‘java.lang.Object’. En este caso se elige el método que toma ‘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
Producción:
Compile Error at line 19.
Explicación: En este caso de sobrecarga del método, se elige el método más específico en tiempo de compilación.
Como ‘java.lang.String’ y ‘java.lang.Integer’ es un tipo más específico que ‘java.lang.Object’, pero entre ‘java.lang.String’ y ‘java.lang.Integer’ ninguno es más específico.
En este caso, Java no puede decidir qué método llamar.
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
Producción:
abcd abc false abcd abcd true
Explicación: en Java, String es inmutable y el búfer de string es mutable.
Entonces, las strings s2 y s1 apuntan a la misma string abc. Y, después de realizar los cambios, la string s1 apunta a abcd y s2 apunta a abc, por lo tanto, es falso. Mientras está en el búfer de strings, tanto sb1 como sb2 apuntan al mismo objeto. Dado que el búfer de string es mutable, hacer cambios en una string también hace cambios en la otra string. Entonces, ambas strings siguen apuntando al mismo objeto después de realizar los cambios en el objeto (aquí 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
Producción:
Compile Error at line 8
Explicación:
1. En la línea 12, el «» en println hace que los números se conviertan automáticamente en strings. Por lo tanto, no suma, sino que se agrega como una string.
2. En Line11 el += hace un lanzamiento automático a un corto. Sin embargo, el número 123456 no puede estar contenido en un corto, por lo que termina con un valor negativo (-7616).
(NOTA: 2 bytes cortos -32,768 a 32,767), aquí el número 123456 no significa el valor de int z, muestra la longitud del valor int
3. Sin embargo, esos otros dos son pistas falsas, ya que el código nunca se compilará debido a la línea 8.
Cualquier número que comience con cero se trata como un número octal (que es 0-7).
Este artículo es una contribución de Pratik Agarwal. Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA