添加到链表后 int 与 Integer 的比较不起作用

Comparison of int to Integer not working after adding to Linkedlist

public static void main(String[] args) {
     int var = 128;
     Integer i = var;
     int j = var;
     LinkedList<Integer> ll = new LinkedList<>();
     ll.add(var);
     System.out.println(i==j);
     System.out.println(i==ll.peek()); 
 }
Output:
true
false

低于数字 128 的变量 var 的值给出了正确的输出:

Output:
true
true

请解释为什么 peek() 对大于 127 的值比较失败?

按如下操作:

System.out.println(i.equals(ll.peek()));

记住,==比较的是参考文献,而不是内容。

检查 Why is 128==128 false but 127==127 is true when comparing Integer wrappers in Java? 以了解为什么对于小于 128 的数字返回 true

这是因为整数常量池。 Java 维护从 -128 到 127 的整数池

private static class IntegerCache {
        static final int low = -128;
        static final int high;  //set to 127
}

因此,对于 -128 到 127 之间的值,将从缓存返回相同的引用,但对于其他值,将创建新的 Integer 对象。

运算符== 检查引用是否相等。 因为Integer i是一个Class类型,还有ll.peak()的返回值,所以要用equals()的方法来比较。