java | мелкий вопрос по поводу метода equals

266
26 июня 2017, 18:27

Как реализованы методы по типу equals? Я понимаю, конечно же, что метод equals должен вызвать объект: собственно, в этом и вопрос. Как он так написан, что может быть вызван лишь объектом? Только сегодня что-то задумался. Если можно — пример, как реализовать подобную "фишку".

Если всё еще непонятно:

public class Main() {
    public static void main(String[] args) {
        equals();  // error
        object.equals(...);  // всё нормально.
    }
}
Answer 1

Метод equals описан в классе Object. Так как все классы наследуются от Object, то метод equals есть у любого объекта.

В Object метод equals выглядит вот так

public boolean equals(Object obj) {
    return (this == obj);
}

То есть по умолчанию объект равен только самому себе.

Многие классы переопределяют метод equals. Например класс Long

public boolean equals(Object obj) {
    if (obj instanceof Long) {
        return value == ((Long)obj).longValue();
    }
    return false;
}

То есть два объекта типа Long равны, если они содержат одинаковое значение типа long.

Answer 2

Автор почему-то поленился написать какая именно ошибка. Но очевидно, что нет такого метода equals(), есть boolean equals(Object obj). И соответственно компилятор сообщит об этом. Трудно не заметить такую мессагу:

Main.java:12: error: method equals in class Object cannot be applied to given types;
equals();
^
required: Object
found: no arguments
reason: actual and formal argument lists differ in length
1 error

Вы для начала хотя бы с этим разобрались:)

READ ALSO
Выбор режима чего-либо. Как сделать менее затратный переключатель режимов для игры

Выбор режима чего-либо. Как сделать менее затратный переключатель режимов для игры

Допустим, есть игра в которой 2 режимаПри одном режиме шарики от стен отскакивают, а при другом не отскакивают

341
Как работать с полем типа DateTime в MSSQL через JDBC?

Как работать с полем типа DateTime в MSSQL через JDBC?

Есть таблица в которой содержится поле типа DateTime в котором хронится дата и время некой операцииПри запросе через MS SQL Manager я вижу что есть...

332
Запуск процесса с мониторингом Windows

Запуск процесса с мониторингом Windows

Добрый день! Необходимо запустить процесс из командной строки и отследить файлы, созданные имПробовал Process Monitor - он действительно отображает...

300