logo

Salida del programa Java | Conjunto 5

Predecir el resultado 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 

Producción :

String


Explicación : En caso de sobrecarga de métodos el método más específico se elige 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 método sobrecarga el método más específico se elige en el momento de la compilación. 
Como 'java.lang.String' y 'java.lang.Integer' son 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, la cadena es inmutable y el búfer de cadena es mutable. 
Entonces las cadenas s2 y s1 apuntan a la misma cadena abc. Y después de realizar los cambios, la cadena s1 apunta a abcd y s2 apunta a abc, por lo tanto, es falsa. Mientras que en el búfer de cadena, tanto sb1 como sb2 apuntan al mismo objeto. Dado que el búfer de cadena es mutable, los cambios en una cadena también realizan cambios en la otra cadena. Entonces, ambas cadenas 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, '' en println hace que los números se conviertan automáticamente en cadenas. Por lo tanto, no suma, sino que los agrega como una cadena. 
2. En la Línea 11, += realiza una conversión automática a un corto. Sin embargo, el número 123456 no puede estar contenido en un corto, por lo que terminará con un valor negativo (-7616). 
(NOTA: 2 bytes cortos: -32768 a 32767) Aquí el número 123456 no significa que el valor de int zit 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 del 0 al 7).
 

parámetro verilog