質問: anotherbits ? 0 : // values are equal (thisbits < anotherbits ? -1 : // (-0.0, 0.0) or (!nan, nan) 1)); // (0.0, -0.0) or (nan, !nan) } この実装のメリットは何ですか?編集:「メリット」は言葉の(非常に)悪い選択でした。これがどのように機能するか知りたいと思いました。
回答: 説明はコードのコメントにあります。 javaには_0.0_と_-0.0_の両方に二重値があり、「not a number」(nan)。単純な_==_は使用できません。これらの値の演算子。doubletolongbits()ソースを覗いて double.equals()メソッドのjavadoc : ほとんどの場合、クラスdouble、_d1_、および_d2_の2つのインスタンスでは、d1.equals(d2)の値はtrueであることに注意してください。 _d1.doublevalue() == d2.doublevalue() _ 値trueも持っています。ただし、2つの例外があります。 _d1_と_d2_の両方が_double.nan_を表す場合、_double.nan == double.nan_の値はtrueであっても、equalsメソッドはfalseを返します。 _d1_が_+0.0_を表し、_d2_が_-0.0_を表す、またはその逆の場合、_+0.0 == -0.0_の値はfalseであっても、等しいテストの値はtrueになります。 この定義により、ハッシュテーブルが適切に動作します。