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()比较失败?
执行以下操作:
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
的数字。
这是由于Integer常量池。 Java维护Integer池的范围从-128到127
private static class IntegerCache {
static final int low = -128;
static final int high; //set to 127
}
因此,对于-128到127之间的值,将从缓存中返回相同的引用,但是对于其他值,将创建新的Integer对象。
运算符==
检查参考是否相等。因为Integer i
是类类型,并且返回的值ll.peak()
,所以应该使用equals()
方法进行比较。