Модификаторы доступа в Java определяют уровень доступа к классам, методам и переменным. Однако, если говорить о
equals и hashCode в контексте модификаторов, то мы имеем в виду их реализацию по умолчанию, предоставляемую классом java.lang.Object. 🚩Реализация
🟠Метод `equals` по умолчанию
Метод
equals в классе Object по умолчанию проверяет, являются ли два объекта одним и тем же экземпляром. Это проверка на ссылочное равенство. public boolean equals(Object obj) {
return (this == obj);
}🟠Метод `hashCode` по умолчанию
Метод
hashCode в классе Object по умолчанию возвращает уникальный целочисленный идентификатор для каждого объекта. Этот идентификатор обычно представляет собой адрес объекта в памяти. public native int hashCode();
🚩Когда нужно переопределять
Переопределение методов
equals и hashCode необходимо, когда вы хотите, чтобы два различных объекта были равны, если их состояния равны, а не если они являются одним и тем же объектом.public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
public static void main(String[] args) {
Person p1 = new Person("Alice", 25);
Person p2 = new Person("Alice", 25);
System.out.println(p1.equals(p2)); // true
System.out.println(p1.hashCode() == p2.hashCode()); // true
}
}Ставь 👍 и забирай 📚 Базу знаний