【发布时间】:2011-06-29 18:00:56
【问题描述】:
我真的不明白为什么会发生以下情况:
Double d = 0.0;
System.out.println(d == 0); // is true
System.out.println(d.equals(0)); // is false ?!
然而,这按预期工作:
Double d = 0.0;
System.out.println(d == 0.0); // true
System.out.println(d.equals(0.0)); // true
我很肯定这在某种程度上与自动装箱有关,但我真的不知道 为什么在使用 == 运算符和调用 .equals 时,0 的装箱方式会有所不同。
这不是隐含违反equals 合约吗?
编辑:
感谢您的快速答复。我认为它的装箱方式不同,真正的问题是:为什么装箱方式不同?我的意思是,如果d == 0d 比d.equals(0d) 直观且符合预期,这将更直观,但是如果d == 0 看起来像Integer 是true,而不是“直观地”d.equals(0) 也应该是真的。
【问题讨论】:
标签: java double equals autoboxing