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