Назад к вопросам
Junior
72
questionbank

Какова функция метода equals() в Java?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Метод equals() в Java используется для сравнения двух объектов на равенство. По умолчанию, он сравнивает ссылки на объекты, то есть проверяет, указывают ли обе переменные на один и тот же объект в памяти.

Однако, для многих классов в Java (например, String, Integer, ArrayList), метод equals() переопределен для сравнения содержимого объектов. При переопределении метода equals(), необходимо также переопределить метод hashCode(), чтобы сохранить контракт о том, что если два объекта равны по equals(), то их hashCode() должны быть одинаковыми.

Обычное использование:

String s1 = new String("hello");
String s2 = new String("hello");
String s3 = s1;

System.out.println(s1 == s2); // false (сравнение ссылок)
System.out.println(s1.equals(s2)); // true (сравнение содержимого, переопределен в String)
System.out.println(s1 == s3); // true (сравнение ссылок)

Переопределение equals() и hashCode():

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 o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age && name.equals(person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

Person p1 = new Person("Alice", 30);
Person p2 = new Person("Alice", 30);
Person p3 = new Person("Bob", 25);

System.out.println(p1.equals(p2)); // true (сравнение по переопределенным методам)
System.out.println(p1.equals(p3)); // false