整数和双重差异

时间:2014-01-22 18:10:02

标签: java

提前致谢... 请解释为什么会发生以下情况:

Integer i1 = 6;
Integer i2 = 6;

(i1 == i2)将返回true。

Double d1 = 6.5;
Double d2 = 6.5;

(d1 == d2)将返回false。

为什么?在这两种情况下只会创建一个对象,但它们的行为仍然不同。使用equals方法会更好,但我对这种行为感到惊讶,只是想知道。

2 个答案:

答案 0 :(得分:3)

您正在通过引用比较Integer(大写字母I)对象,这不是比较java中对象的“正确”方法。

缓存对某些整数的引用以优化性能。这就是为什么通过引用比较某些Integer(大写字母I)对象似乎在Java中的少数情况下工作。

这不是Java开发人员希望依赖或使用的行为,因为它不可靠,可能会更改,并使代码更难理解。

答案 1 :(得分:2)

官方解释是here,第5.1.7章中的最后4段。