En el código de abajo, la línea System.out.println(sumInteger(bigs) == sumInteger(bigs));
se muestra como falso. Pero cuando de nuevo se comparan las otras clases de envoltura Integer System.out.println(bc == ab);
, devuelve cierto. ¿Por qué es la comparación de clases de envoltura falsa en el primer caso y verdadero en el segundo caso?
import java.util.Arrays;
import java.util.List;
public class Arrays {
public void array1() {
List<Integer> bigs = Arrays.asList(100,200,300);
System.out.println(sumInteger(bigs) == sum(bigs)); // 1. Output: true
System.out.println(sumInteger(bigs) == sumInteger(bigs)); //2. Output: false
Integer ab = 10;
System.out.println(ab == 10); //3. Output: true
Integer bc = 10;
System.out.println(bc == ab); //4. Output: true
}
public static int sum (List<Integer> ints) {
int s = 0;
for (int n : ints) { s += n; }
return s;
}
public static Integer sumInteger(List<Integer> ints) {
Integer s = 0;
for (Integer n : ints) { s += n; }
return s;
}
public static void main(String[] args) {
Array tm = new Array();
tm.array1();
}
}
System.out.println(sumInteger(bigs) == sum(bigs)); // 1. ***Output: true
System.out.println(sumInteger(bigs) == sumInteger(bigs)); //2. ***Output: false
sumInteger () devuelve un entero y la suma () devuelve un entero, por lo que se está probando la igualdad de un entero con un int, lo que hace que el número entero a ser auto-sacó de la caja, por lo que terminan comparando un int con un int. Ambos enteros ahora tienen el mismo valor, por lo tanto, 'verdadero'.
sumInteger () devuelve un entero, llamando sumInteger () devuelve un número entero de nuevo. Estos dos números enteros se crean por separado objetos, sin embargo, ambos tienen el mismo valor interno. Cuando se utiliza '=='' compararlos compara las referencias y ver cómo se creó cada objeto de forma independiente las referencias no son iguales, por lo tanto, 'falso'. Si hubiera querido poner a prueba el valor de la igualdad que habría tenido que utilizar los .equals método ().