Попытка сравнить две строки в Java, используя equals () - PullRequest
0 голосов
/ 26 сентября 2019

Я пробовал несколько способов сравнить две строки «телефонных номеров», и ни одна из них, похоже, не прошла тесты.код, который я сейчас использую:

public boolean equals (PhoneNumber other) {     
    boolean results = other.equals(digits);
    return results;
}

Тест, который я пытаюсь пройти без жесткого кодирования:

p = new PhoneNumber("5551212");
    p2 = new PhoneNumber("5551212", "Home");
    displayResults(p.equals(p2));
    p.setDigits("1234123");
    displayResults(p.equals(p2) == false);

1 Ответ

0 голосов
/ 26 сентября 2019

Две отдельные проблемы:

[1] цифра - строка;Другой номер телефона.они никогда не будут равны.То, что вы, вероятно, ищете, это other.digits.equals(this.digits).Теперь мы сравниваем цифры номера телефона A с цифрами номера телефона B: яблоки и яблоки.Это может сработать.

[2] сигнатура метода равно public boolean equals(Object other).Ваш метод equals имеет другую сигнатуру, что означает, что он является совершенно другим методом, не имеющим никакого отношения к реальному методу equals ... за исключением совпадения, что так случилось, что оно делится с ним именем.Это означает, что ваш «поддельный» метод equals не будет использоваться другим кодом, использующим методы equals.Например, метод contains для arraylist.Решение состоит в том, чтобы сделать так, чтобы метод equals имел в качестве аргумента Object other.

[3], когда вы это сделаете, вы не сможете вызвать .digits для other;в конце концов, только номера телефонов имеют цифры;любой случайный объект не гарантируется.Решение состоит в том, чтобы разыграть other, но сделать это можно только после проверки, является ли это номер телефона:

public boolean equals(PhoneNumber other) {
    if (!(other instanceof PhoneNumber)) {
        // somebody is comparing apples to oranges. Obviously, then...
        return false;
    }
    return ((PhoneNumber) other).digits.equals(this.digits);
}

. Обратите внимание, что для правильной работы такого объекта, скажем, HashSet, выдолжен всегда переопределять как hashCode, так и метод equals, либо ни тот, ни другой.

Project Lombok автоматизирует все эти вещи, вас это может заинтересовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...