提前致谢... 请解释为什么会发生以下情况:
Integer i1 = 6;
Integer i2 = 6;
(i1 == i2)
将返回true。
而
Double d1 = 6.5;
Double d2 = 6.5;
(d1 == d2)
将返回false。
为什么?在这两种情况下只会创建一个对象,但它们的行为仍然不同。使用equals方法会更好,但我对这种行为感到惊讶,只是想知道。
答案 0 :(得分:3)
您正在通过引用比较Integer(大写字母I)对象,这不是比较java中对象的“正确”方法。
缓存对某些整数的引用以优化性能。这就是为什么通过引用比较某些Integer(大写字母I)对象似乎在Java中的少数情况下工作。
这不是Java开发人员希望依赖或使用的行为,因为它不可靠,可能会更改,并使代码更难理解。
答案 1 :(得分:2)
官方解释是here,第5.1.7章中的最后4段。