Оба примера кода работают.if (this == o) return true;
в первом примере - это оптимизация производительности (скорее всего, преждевременная оптимизация - всегда сначала профиль) , которая проверяет, сравнивается ли объект с самим собой.В Java оператор ==
сравнивает, являются ли два объекта одним и тем же экземпляром, а не являются ли они разными экземплярами с одинаковыми данными.
Возможны стили написания метода equals.Вот как я обычно это делаю:
public boolean equals(Object obj) {
if (obj instanceof Product) {
Product that = (Product) obj;
return this.id == that.id;
}
return false;
}
Если я знаю, что мой код никогда не будет сравнивать объект с объектами других типов или с нулем, то я даже могу написать код, как показано ниже, поэтомуто, что это вызовет исключение, если это произойдет в любом случае - это будет означать, что в моем коде есть ошибка, поэтому, если он рано произойдет, я узнаю об этом и исправлю его раньше.
public boolean equals(Object obj) {
Product that = (Product) obj;
return this.id == that.id;
}