Метод equals() в Java: Полное руководство
В Java сравнение объектов производится с помощью метода equals() класса Object. Этот метод сравнивает содержимое объектов и выводит значение типа boolean. Значение true - если содержимое эквивалентно, и false — если нет.
Операция == не рекомендуется для сравнения объектов в Java. Дело в том, что при сравнении объектов, операция == вернет true лишь в одном случае — когда ссылки указывают на один и тот же объект. В данном случае не учитывается содержимое переменных класса.
При создании пользовательского класса, принято переопределять метод equals() таким образом, что бы учитывались переменные объекта.
Рассмотрим пример использования метода equals() - в классе Person определены три переменные: fullName, age и retired. В переопределенном методе equals() все они участвуют в проверке. Если вы не хотите учитывать какую-то переменную при проверке объектов на равенство, вы имеете право не проверять ее в методе equals().
public class Person {
private String fullName;
private int age;
private boolean retired;
...
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Person person = (Person) o;
if (getAge() != person.getAge()) {
return false;
}
if (isRetired() != person.isRetired()) {
return false;
}
return getFullName() != null
? getFullName().equals(person.getFullName())
: person.getFullName() == null;
}
}
Определим два объекта person1 и person2 типа Person с одинаковыми значениями. При их сравнении с помощью операции "==" вернется значение false, так как это разные объекты. Если же сравнивать их методом equals(), то результат будет равен true. Также в этом примере объявлена переменная person3, которой присвоена ссылка из переменной person1. Вот сравнение person1 == person3 вернет значение true, так как переменные указывают на один объект. При сравнении person1 и person3 с помощью метода equals(), тоже вернется значение true. В методе equals() первой строкой проверяются ссылки сравниваемых объектов - this == o, и если они равны, сразу же возвращается значение true.
public class PersonExample2 {
public static void main(String[] args) {
Person person1 = new Person("Петров Иван Иванович", 56, false);
Person person2 = new Person("Петров Иван Иванович", 56, false);
Person person3 = person1;
System.out.println("person1 == person2? " + (person1 == person2));
System.out.println("person1 == person3? " + (person1 == person3));
System.out.println("person1.equals(person2)? " + person1.equals(person2));
System.out.println("person1.equals(person3)? " + person1.equals(person3));
}
} Результат выполнения:
person1 == person2? false
person1 == person3? true
person1.equals(person2)? true
person1.equals(person3)? true
Курс 'Java для начинающих' на Udemy
Please log in or register to have a possibility to add comment.