添加到链表后 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()
的方法来比较。
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()
的方法来比较。