Реализация метода Equals для массивов - Java - PullRequest
0 голосов
/ 01 апреля 2019

Я удивлен, что этот equals метод работает .. даже если он использует .equals, который больше не существует в его старом виде, так как я перезаписал его ..?

Я имею в виду, если вы посмотрите на код, чтобы сравнить два элемента массива, которые я использую .equals.

Но ... если я перезаписываю метод equals, не будет ли .equals просто использовать мой перезаписанный метод? Я немного запутался, я был бы очень признателен за объяснение того, как это работает.

public boolean equals(Object other) {
    if (other instanceof arrayClass) {
        arrayClass that = (arrayClass) other;
        if (this.number == that.number) {
            for (int i = 0; i < this.number; i++) {
                if (this.elements[i].equals(that.elements[i])) {

                }
                else {
                    return false;
                }
            }
            return true;
        }
        else {
            return false;
        }
    }
    else {
        return false;
    }
}

Примечание: number представляет длину массивов.

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 01 апреля 2019

Я удивлен, что этот метод equals работает .. даже при том, что он использует .equals, который больше не существует в его старой форме, так как я перезаписал его

Вы переопределили метод equals для класса arrayClass. Внутри вашей реализации equals вы вызываете equals для элементов массива, что означает, что вы вызываете метод equals класса, который является типом элемента массива elements. Например, если elements является String[], elements[i].equals() вызывает String s equals.

2 голосов
/ 01 апреля 2019

Вызов equals внутри цикла for не вызывает вашу реализацию equals. Ваша реализация находится над классом Array, и функция equals внутри цикла for вызывает реализацию equals для любого типа класса, который вы храните в массиве.

Кроме того, этот фрагмент кода не оптимизирован. Вы можете удалить пустой блок внутри цикла for:

for(int i = 0; i < this.number; i++){
    if (!this.elements[i].equals(that.elements[i])) {
          return false;
    }
}
return true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...