【发布时间】:2010-09-11 03:58:52
【问题描述】:
编辑:好的,好的,我看错了。我没有将 int 与 Integer 进行比较。适当注明。
我的 SCJP 书说:
当 == 用于比较原语时 对于包装器,包装器将是 展开,比较将是 原始到原始。
所以你会认为这段代码会打印true:
Integer i1 = 1; //if this were int it'd be correct and behave as the book says.
Integer i2 = new Integer(1);
System.out.println(i1 == i2);
但它会打印false。
另外,根据我的书,这应该打印true:
Integer i1 = 1000; //it does print `true` with i1 = 1000, but not i1 = 1, and one of the answers explained why.
Integer i2 = 1000;
System.out.println(i1 != i2);
不。我是false。
什么给了?
【问题讨论】:
-
看,我不确定这本书的这部分是写得不好还是我是个白痴,但我就是不知道它说的原因是什么。我最好的理解尝试是 == 与 != 的处理方式不同。也许 == 反映了价值平等(深度平等),但 != 没有。无论如何,书上所说的无论如何都不会发生。
-
不,这种情况下的问题在于您要比较的两种类型。 == 和 != 的行为方式相同。
-
仅仅这个例子就足以让我觉得 Java 是某种恶作剧而不是真正的编程语言。
-
@dsimcha - 这是一个非常蹩脚的说法。如果要比较两个整数指针,在 C 语言中可能会遇到同样的问题 - 它更明确。
-
您的第二个示例确实打印了
true。见ideone