Java что такое equals

Java что такое equals

если сказать intellij IDEA переопределить метод equals() автоматически, то она выдаст вот это Тут пропущена проверка со сравниванием объекта с null Как вы думаете, почему IDEA так делает? Предполагается, что такая проверка будет проведена программистом перед вызовом метода equals() с обоими объектами?

Над статьёй про hashCode особенно хорошо потрудились. Отдельное спасибо хочется сказать за примеры, которые были в статье. Всё сразу стало понятно. Как всегда на высшем уровне!

*****. Такс,может кто объяснить,что тут происходит? «Если мы дошли до конца метода, значит, у нас ОБЪЕКТ типа Person и ссылка не null. Тогда преобразовываем ЕГО к типу Person и будем сравнивать внутренности обоих объектов. » Зачем преобразовывать объект типа Person к типу Person?

Так все хорошо начиналось,а сейчас чувствую себя нереально тупым. Сначала написано,что оператор «= comment-layout»>

 Person person = (Person) obj; 
 if (obj instanceof Person person) 

Подскажите, может я что-то пропустил, но разве мы проходили Override? Если да, то подскажите статью пожалуйста

 @Override public boolean equals(Object o) < if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; MyClass myClass = (MyClass) o; // здесь сравните поля, которые имеют значение для вашего класса return field1 == myClass.field1 && Objects.equals(field2, myClass.field2) && . ; >@Override public int hashCode() < // используйте те же поля, что и в equals() return Objects.hash(field1, field2, . ); >

В этом шаблоне: 1. Замените MyClass на имя вашего конкретного класса. 2. Замените field1, field2, и т.д. на поля вашего класса, которые вы хотите сравнивать в equals() и использовать для расчета хеш-кода в hashCode(). Если у вас есть только одно поле, просто уберите лишние. Если поле — это примитивный тип данных, вы можете сравнивать его с помощью ==. Если поле — это объект (включая String и обертки над примитивами, такие как Integer и Double), следует использовать Objects.equals().

Читайте также:  What is java spring batch

Касательно @Override. В Java, @Override — это аннотация, которую можно использовать, когда вы переопределяете метод, определенный в родительском классе или интерфейсе. Переопределение — это механизм, позволяющий подклассу предоставить свою собственную реализацию метода, который уже предоставлен одним из его родительских классов или интерфейсов. Аннотация @Override делает ваш код более читабельным, потому что она позволяет любому, кто читает ваш код, немедленно видеть, что метод предназначен для переопределения метода в родительском классе. Это также помогает предотвратить ошибки, потому что компилятор будет проверять, что вы действительно переопределяете метод. Например, предположим, что у вас есть базовый класс Animal с методом makeSound(). Вы могли бы создать подкласс Dog и переопределить метод makeSound(), чтобы он выводил «Bark» вместо общего звука, которые делают животные.

 class Animal < void makeSound() < System.out.println("The animal makes a sound"); >> class Dog extends Animal < @Override void makeSound() < System.out.println("The dog barks"); >> 

В этом примере, когда вы вызываете makeSound() на объекте типа Dog, он будет выводить «The dog barks», а не «The animal makes a sound».

Источник

Java что такое equals

День добрый, уважаемые дамы и господа знатоки. Есть вопрос прикладного характера. В начале объясняется, что прежде сравнения нужно убедиться, что сравниваются объекты одного класса. Это логично и понятно. Соответствующая строка в коде дополняет сказанное. НО! Зачем тогда следующей строкой приводить проверяемый объект к классу объекта-эталона? Если мы и так знаем, что объекты одного класса, иначе до выполнения этой строки не дошло бы — метод прекращается после return, зачем ещё раз приводить их к одному классу? Выглядит дико и просто как пятое колесо. У велосипеда. @Override public boolean equals(Object o) < if (getClass() != o.getClass()) return false; Man man = (Man) o; // Вот это что?? Зачем. return dnaCode == man.dnaCode; >

 @Override public boolean equals(Object o) < if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; LuxuryAuto that = (LuxuryAuto) o; // а может добавить еще одну проверку ? if (this.hashCode() != o.hashCode()) return false; // например такую ? // тогда псевдо одинаковые обьекты будут не равны при не равных хешах if (manufactureYear != that.manufactureYear) return false; return dollarPrice == that.dollarPrice; >@Override public int hashCode()

последний пример вводит в тупик. При сравнении через equals, сначала проверяются hashCode’ы, если они не равны, то сравнение через equals не последует. В нашем примере как раз таки это и происходит. Как equals показал true, если хэши у них разные и до метода equals код не должен был дойти и сразу дать false?? Теперь поговорим о методе hashCode(). Зачем он нужен? Ровно для той же цели — сравнения объектов. Но ведь у нас уже есть equals()! Зачем же еще один метод? Ответ прост: для повышения производительности. Хэш-функция, которая представлена в Java методом hashCode(), возвращает числовое значение фиксированной длины для любого объекта. В случае с Java метод hashCode() возвращает для любого объекта 32-битное число типа int. Сравнить два числа между собой — гораздо быстрее, чем сравнить два объекта методом equals(), особенно если в нем используется много полей. Если в нашей программе будут сравниваться объекты, гораздо проще сделать это по хэш-коду, и только если они равны по hashCode() — переходить к сравнению по equals().

Читайте также:  font-weight

Источник

Оцените статью