Я действительно не могу понять, почему происходит следующее:
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
контракт?
* It is reflexive: for any non-null reference value
* x, x.equals(x) should return
* true.
РЕДАКТИРОВАТЬ :
Спасибо за быстрые ответы.Я подумал, что это по-разному, реальный вопрос: почему это по-другому?Я имею в виду, что это было бы более интуитивно, если d == 0d
, чем d.equals(0d)
, интуитивно и ожидаемо, однако, если d == 0
, который выглядит как Integer
, равен true
, чем 'интуитивно' d.equals(0)
также должно быть верным.1030 *