IDE: Eclipse; Язык: Java ядро Почему объекты ниже не равны в Java?
package p1;
public class StringTestA {
/**
* @param args
*/
public static void main(String[] args) {
Object o1 = new StringTestA();
Object o2 = new StringTestA();
StringTestA o3 = new StringTestA();
StringTestA o4 = new StringTestA();
if (o1.equals(o2)) {
System.out.println("Object o1 and o2 are eqals");
}
if (o3.equals(o4)) {
System.out.println("Object o3 and o4 are eqals");
}
}
public boolean equals(StringTestA other) {
System.out.println("StringTestA equals mathod reached");
return true;
}
}
Выход:
StringTestA equals method reached
Object o3 and o4 are equals
Нет выхода, если равен в не переопределены.
Вопрос: Почему System.out.println("Object o1 and o2 are eqals");
строка не печатается как equals, возвращается true;
Если вы переопределите equals(), вы ДОЛЖНЫ также переопределить hashCode(). В противном случае произойдет нарушение общего контракта для Object.hashCode, что может иметь неожиданные последствия, когда ваш класс связан со всеми хэш-коллекциями. –
@AndreaBorgogelliAvveduti: Хотя это правда и хороший совет, это касательно вопроса. Насколько нам известно, OP действительно переопределял hashCode, но не включал его, потому что он не имел никакого отношения к вопросу. –
Я бы не назвал это несущественным. Он * * только касательно связан. Я бы, конечно, упомянул об этом в качестве побочного комментария в конце ответа, например: «Сторона примечания: если вы переопределяете« равные », вам также нужно переопределить« hashCode ». (+1, кстати, хорошее объяснение, особенно аннотация). –