De este post del foro, sale un ejemplo curioso de java. Fíjate en el siguiente código
public static void main (String [] args) {
Integer a = 100;
Integer b = 100;System.out.println(a == b);
}
Pues bien, este ejemplo da como resultado "true". Si cambias los valores de a y b (pero manteniéndolos iguales), verás una cosa curiosa. Para valores entre -128 y 127, el resultado es "true". Para valores fuera de ese rango, el resultado es "false".
El motivo podemos encontrarlo en este post sobre Auto-Boxing del Weblog de Victor Ramirez. Teóricamente las instancias de Integer que se crean de forma más o menos automáticamente 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.
Una curiosidad que puede dar muchos quebraderos de cabeza a un programador novato que no tiene muy controlada la diferencia entre el método equals() y el ==.
Por eso siempre es una buena practica usar el método equals para comparar el estado entre objetos.
Ese ejemplo y el clasico con los String son preguntas de certificación.
Ejemplo de los String:
String a= new String(«HOLA MUNDO»);
String b= new String(«HOLA MUNDO»);
if (a == b) System.out.println(«IGUALES»)
else System.out.println(«DIFERENTES»);
Cual es la salida?…
Muy buen post.
Pingback: Tweets that mention Diario de Programación » Blog Archive » Curiosidad en java -- Topsy.com
Es algo parecido a lo que sucede con los objetos String, al compararlos con == no necesariamente el resultado sea true aunque sean la misma cadena.
Esto es por que lo que se compara en este caso son las instancias del objeto no su valor.
Por eso siempre que quiero comparar la igualdad entre objetos uso el método equals.
@Bladimir
Error de compilacion, te falto un «;»
;D