Из этот вопрос Я узнал Double.NaN не равен себе.
Я проверял это для себя и заметил, что это не так, если вы переносите Double.NaN в экземпляр Double. Например:
public class DoubleNaNTest {
public static void main(String[] args) {
double primitive = Double.NaN;
Double object = new Double(primitive);
// test 1 - is the primitive is equal to itself?
boolean test1 = primitive == primitive;
// test 2 - is the object equal to itself?
boolean test2 = object.equals(object);
// test 3 - is the double value of the object equal to itself?
boolean test3 = object.doubleValue() == object.doubleValue();
System.out.println("Test 1 = " + test1);
System.out.println("Test 2 = " + test2);
System.out.println("Test 3 = " + test3);
}
}
Выходы:
Test 1 = false
Test 2 = true
Test 3 = false
Мне кажется, что все три теста должны оцениваться как false, так как все три операции эквивалентны (как если бы вы использовали что-то другое, а затем Double.NaN).
Может ли кто-нибудь объяснить, что здесь происходит?