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

Crear cuestionario