Auto-Boxing en Java

   Solo por curiosidad compila este código y veras que resultado te da...
import java.io.*;

public class EsFalso {
 public static void main (String [] args) {
    Integer a = 128, b = 128;
    System.out.println(a == b);
 }
}
   Bueno, así decidi comenzar esta entrada, ahora compila el mismo código cambiando por "int" (no Integer)... Notaste la diferencia, y ahora te explico a que se debe esto.

   Se trata de que no es por el tipo de variable, sino por el operador booleano que se utiliza para realizar la comparación, teóricamente las instancias de Integer que se crean de forma más o menos automática en esas asignaciones deberían ser distintas y el == debería dar siempre "false". Pero por eficiencia, el compilador reaprovecha instancias de estas clases, de forma que cuando se hace este tipo de conversión (de un tipo primitivo a un objeto Integer, Boolean, o lo que sea), se tiene que == da "true" en los siguientes casos:

  • Siempre en los Boolean y en los Byte
  • Entre -128 y 127 en los Short e Integer
  • Entre u0000 y u007F en los Character.

   A todo esto se le llama Auto-Boxing, que traducido significa Auto-Empacador, y en realidad no sirve de mucho en cuanto a rendimiento, es solo para facilitarnos la tarea de escribir tanto código para realizar operaciones matemáticas, así que ya sabes, si vas a comparar cosas sencillas utiliza "==", del resto utiliza el métido ".equals()".

   Más Información: Auto-Boxing.




Lamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, así que la moderación se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.

Si necesitas publicar código haz click en "Conversión" para hacerlo legible.
ConversiónConversión