clases de contenedor y aclaraciones genéricos en Java

Shalin Fernando:

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();
    }
}
Dumidu Udayanga:
   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 ().

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=180620&siteId=1
Recomendado
Clasificación