Я действительно могу сказать, почему происходит следующее:
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)
, также должен быть правдой.