Какое назначение у методов equals() и hashCode()?​

Методы используются для сравнения объектов. Их необходимо переопределять во вновь созданных классах. Метод equals() в изначальном виде просто сравнивает ссылки:
public boolean equals(Object obj) {
    return (this == obj);
}

Создатели Java возложили полную ответственность на разработчиков, так как именно создатель класса знает как правильно сравнить его объекты. Метод возвращает true в случае, если объекты идентичны. Иначе false.

 public class EqualsTest{
        public static void main(String[] args) {
            Object o1 = new Object();
            Object o2 = new Object();
            System.out.println(o1.equals(o2));
            o2=o1;
            System.out.println(o1.equals(o2));
            String s1 = new String("TestString");
            String s2 = new String("TestString");
            System.out.println(s1==s2);
            System.out.println(s1.equals(s2));
        }
    }

Вывод:
    false
    true
    false
    true

Метод hashCode() возвращает целое значение, основываясь на полях объекта. У метода существует контракт:

1. При повторном вызове (при условии что состояние объекта не менялось) hashCode() возвращает одно и то же значение. Но в различных приложениях хэшкоды одинаковых объектов могут различаться.

 public class TestHashCode{
        public static void main(String[] args) {
            String s1 = new String("testString");
            System.out.println(s1.hashCode());
        }

    }
    Вывод: 1727748931

2. Два объекта, для которых equals() возвращает true, имеют одинаковый хэшкод.

public class TestHashCode{
        public static void main(String[] args) {
        String s1 = new String("testString");
        String s2 = new String("testString");
        System.out.println(s1==s2);
        System.out.println(s1.equals(s2));
        System.out.println(s1.hashCode());
        System.out.println(s2.hashCode());
        }

    }
    Вывод:
            false
        true
        1727748931
        1727748931

3. Не обязательно, что у разных объектов разные хэшкоды.

Понравилась статья? Поделиться с друзьями:

Комментарии:

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: