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
请解释为什么peek((在127以上的值上比较失败?
按如下操作:
System.out.println(i.equals(ll.peek()));
请记住,==
比较的是引用,而不是内容。
检查在Java中比较Integer包装时,为什么128==128为false,而127==127为true?以理解为什么它对于小于CCD_ 3的数字返回CCD_。
这是因为Integer常量池。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()
方法对它们进行比较。