Переопределение метода Java метода equals - PullRequest
0 голосов
/ 01 октября 2019

As, equals() метод в String class это переопределенный метод из класса Object. И во время переопределения, изменение подписи не допускается.

Но String.equals() сравнивает строковые значения, тогда как Object.equals() сравнивает ссылочные значения. Таким образом, подпись отличается в обоих классах? Или как это делается внутренне?

1 Ответ

0 голосов
/ 01 октября 2019

Подпись обоих классов одинакова, но реализация отличается. Для класса Object:

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

Для класса String реализация выглядит так:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

Поэтому, когда вы вызываете метод equals объекта String, он вызывает его переопределенную версию метода, т.е. класс String

...