なぜ次のことが起こるのか、私は本当に頭を悩ませることができます:
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
これが何らかの形でオートボクシングに関連していることは確かですが、演算子が使用されているときと呼び出されたときに、なぜ0
ボックス化が異なるの==
.equals
か本当にわかりません。
これは暗黙のうちにequals
契約に違反していませんか?
* 再帰的です: null 以外の参照値の場合 * x, x.equals(x) は返す必要があります * 真実。
編集:
速い答えをありがとう。私はそれが異なって箱に入れられていると考えました.本当の問題は:なぜそれが異なって箱に入れられているのですか? これは、直感的で予想されるd == 0d
よりも直感的であるということですが、「直感的に」よりもそうであると思われる場合も同様です。d.equals(0d)
d == 0
Integer
true
d.equals(0)