Я изо всех сил, чтобы понять это Koan:Почему object.equals (новый Integer (1)) равен true?
@Koan
public void equalsMethodCanBeChangedBySubclassesToTestsIfTwoObjectsAreEqual() {
Object object = new Integer(1);
assertEquals(object.equals(object), true);
assertEquals(object.equals(new Integer(1)), __);
// Note: This means that for the class 'Object' there is no difference between 'equal' and 'same'
// but for the class 'Integer' there is difference - see below
}
Насколько я понимаю, потому что object
является экземпляром класса Object
, метод .equals()
не были перезаписаны, и поэтому для проверки объекта равенства.
Если new Integer(1)
создает новый экземпляр, то это должен быть отдельный объект для object
. Следуя моему примеру, правильный ответ должен быть false
, но только true
делает этот пропуск. Где ошибка в моей логике?
Редактировать: Я понимаю, что целые числа между -128 и 127 кэшируются. Если мое понимание объекта object
верное (как указано выше), то это не имеет значения.
Возможный дубликат [Java: Целое число равно vs. ==] (http://stackoverflow.com/questions/3637936/java-integer-equals-vs) – sidgate
@sidgate Нет, этот полностью не связан с "равно vs. == " – dasblinkenlight
Не забудьте принять ответ. – Timmos