添加到Linkedlist后,int与Integer的比较不起作用


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()方法对它们进行比较。

相关内容

  • 没有找到相关文章

最新更新