El siguiente código me pareció realmente confuso ya que proporcionaba dos salidas diferentes. El código se probó en jdk 1.7.¿Cómo funcionan los operadores! = Y == en enteros en Java?
public class NotEq {
public static void main(String[] args) {
ver1();
System.out.println();
ver2();
}
public static void ver1() {
Integer a = 128;
Integer b = 128;
if (a == b) {
System.out.println("Equal Object");
}
if (a != b) {
System.out.println("Different objects");
}
if (a.equals(b)) {
System.out.println("Meaningfully equal.");
}
}
public static void ver2() {
Integer i1 = 127;
Integer i2 = 127;
if (i1 == i2) {
System.out.println("Equal Object");
}
if (i1 != i2){
System.out.println("Different objects");
}
if (i1.equals(i2)){
System.out.println("Meaningfully equal");
}
}
}
de salida:
[ver1 de salida]
Diferentes objetos
con significado igual.[ver2 salida]
Equal Objeto
con significado igual
¿Por qué la == y! = Prueba produce resultados diferentes para ver1() y ver2() para mismo número mucho menor que el Integer. ¿VALOR MÁXIMO? ¿Se puede concluir que == verificar números mayores a 127 (para las clases contenedoras como Integer como se muestra en el código) es una pérdida de tiempo?
Esto se debe a que el mecanismo de autoboxing almacena en caché y reutiliza el mismo objeto para valores en el rango -128 - 127. Este es un duplicado de una pregunta anterior. – aioobe
@quixoto: ver mi respuesta de edición :) – BoltClock
http://stackoverflow.com/questions/1700081/why-does-128-128-return-false-but-127-127-return-true-when-converting-to -integ –