将int与Integer的比较在添加到Linkedlist [duplicate]后不起作用

问题描述 投票:0回答:3
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

虽然变量var的值低于数字128,但给出的正确输出为:

Output:
true
true

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

java linked-list int integer
3个回答
2
投票

执行以下操作:

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

记住,==比较引用而不是内容。

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


1
投票

这是由于Integer常量池。 Java维护Integer池的范围从-128到127

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

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


0
投票

运算符==检查参考是否相等。因为Integer i是类类型,并且返回的值ll.peak(),所以应该使用equals()方法进行比较。

© www.soinside.com 2019 - 2024. All rights reserved.