【发布时间】:2012-04-07 02:51:18
【问题描述】:
下面的代码让我很困惑,因为它提供了两种不同的输出。代码在 jdk 1.7 上测试过。
public class NotEq {
public static void main(String[] args) {
ver1();
System.out.println();
ver2();
}
public static void ver1() {
Integer a = 128;
Integer b = 128;
if (a == b) {
System.out.println("Equal Object");
}
if (a != b) {
System.out.println("Different objects");
}
if (a.equals(b)) {
System.out.println("Meaningfully equal.");
}
}
public static void ver2() {
Integer i1 = 127;
Integer i2 = 127;
if (i1 == i2) {
System.out.println("Equal Object");
}
if (i1 != i2){
System.out.println("Different objects");
}
if (i1.equals(i2)){
System.out.println("Meaningfully equal");
}
}
}
输出:
[ver1 输出]
不同的对象
有意义的平等。[ver2 输出]
相等对象
有意义的平等
为什么 == 和 != 测试会为 ver1() 和 ver2() 生成不同的结果,而相同的数字远小于 Integer.MAX_VALUE?是否可以断定 == 检查大于 127 的数字(对于像代码中显示的 Integer 这样的包装类)完全是浪费时间?
【问题讨论】:
-
这是因为自动装箱机制为 -128 - 127 范围内的值缓存和重用相同的对象。这是上一个问题的重复。
-
@quixoto:查看我的编辑回复:)
标签: java integer wrapper operator-keyword equals-operator