this в методе equals()

136
16 ноября 2020, 04:00

Разбираюсь с hashCode() и equals()

import java.util.Objects;
public class Man {
    private String noseSize;
    private String eyesColor;
    private String haircut;
    private boolean scars;
    private int dnaCode;
    public Man(String noseSize, String eyesColor, String haircut, boolean scars, int dnaCode) {
        this.noseSize = noseSize;
        this.eyesColor = eyesColor;
        this.haircut = haircut;
        this.scars = scars;
        this.dnaCode = dnaCode;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (getClass() != o.getClass()) return false;
        Man man = (Man) o;
        return dnaCode == man.dnaCode;
    }
    public String getNoseSize() {
        return noseSize;
    }
    public void setNoseSize(String noseSize) {
        this.noseSize = noseSize;
    }
    public String getEyesColor() {
        return eyesColor;
    }
    public void setEyesColor(String eyesColor) {
        this.eyesColor = eyesColor;
    }
    public String getHaircut() {
        return haircut;
    }
    public void setHaircut(String haircut) {
        this.haircut = haircut;
    }
    public boolean isScars() {
        return scars;
    }
    public void setScars(boolean scars) {
        this.scars = scars;
    }
    public int getDnaCode() {
        return dnaCode;
    }
    public void setDnaCode(int dnaCode) {
        this.dnaCode = dnaCode;
    }
}

Я вроде бы знаю как работает this, в конструкторе, в сеттере его пишу, но обычно this.что-то, а тут увидел в методе equals, if (this == o) return true; Не понял на что простой this ссылается?

Answer 1

this указывает на то же самое что и всегда, на экземпляр класса Man

Тут происходит сравнение ссылок

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    ...
    return false;
}

а смысл выражения if (this == o) return true; завершить проверку и вернуть true если в метод equals передан этот самый объект.

Man philipFry = new Man();
Man hubertFarnsworth = new Man(); 
// вот тут сработает проверка равенства ссылок на экземпляры
System.out.println(philipFry.equals(philipFry));        // true
// а тут мы сравниваем 2 разных объекта
System.out.println(philipFry.equals(hubertFarnsworth)); // false
READ ALSO
hashCode() и equals() и мои примеры

hashCode() и equals() и мои примеры

Прочитал статью на Хабре и вот мои примеры и информация оттуда:

121
Как обновить текст тега?

Как обновить текст тега?

На javafx создал приложение, добавил браузер javafxscene

104
Ajax. Выполнение без перезагрузки страницы

Ajax. Выполнение без перезагрузки страницы

У меня есть ui с помощью которого я могу удалять, редактировать, добавлять записи в бдНа главной странице просто таблица с соответствующими...

92
Разъясните на пальцах как работает эта строка

Разъясните на пальцах как работает эта строка

Задача: написать функцию, которая принимает строку скобок, и определить, является ли порядок скобок действительным['(',')'] - это действительный...

96