equals () и оператор "==" в Java - PullRequest
8 голосов
/ 01 мая 2011

Я знаю, что equals() будет сравнивать значения объектов, оператор '==' проверит, указывает ли переменная на ту же память.

Я не понимаю, как equals() сравнивает значения объектов, например:

class Test {
    public Test(int x, float y) {
        this.x = x;
        this.y = y;
    }

    int x,
    float y;
}

Test test1 = new Test(1,2.0);
Test test2 = new Test(1,2.0);

Так что, если я использую equals(), будет ли сравниваться каждое свойство в каждом объекте?

А что, если мы говорим о String? используя equals () и оператор «==», нужно ли нам переопределять equals ()?

Ответы [ 3 ]

20 голосов
/ 01 мая 2011

Нет, если вы не переопределите equals -метод в вашем классе, тогда equals будет таким же, как ==.См. документацию для этого:

Метод equals для класса Object реализует максимально различающее возможное отношение эквивалентности для объектов;то есть для любых ненулевых ссылочных значений x и y этот метод возвращает true, если и только если x и y ссылаются на один и тот же объект (x == y имеет значение true).

В документации также указано, какие требования предъявляются к equals методам на случай, если вы хотите их реализовать.

11 голосов
/ 01 мая 2011

Нет, если вы не перегрузите его должным образом в соответствии с правилами, установленными Джошуа Блохом .

Поведение по умолчанию проверяет равенство ссылок, используя ==.

Важно переопределить equals и hashCode для ваших объектов, особенно если вы собираетесь использовать их в java.util.Collections.

0 голосов
/ 01 мая 2011

Метод equals определен в классе Object, и, поскольку все объекты в Java неявно или явно наследуются от этого класса, они также будут наследовать метод equals (), реализованный Object.Реализация по умолчанию в Object просто вернет true, если объекты проходят условие "==".

Однако вы можете переопределить метод equals () в своем собственном классе и указать критерии, которые необходимо проверить.чтобы увидеть, если два объекта значимо равны.Например, вы можете сказать, что два экземпляра равны, только если каждый из его атрибутов содержит те же значения, что и другой объект, или вместо этого вы можете просто захотеть проверить несколько атрибутов, которые составляют объекты «бизнес-ключ», и игнорировать другие.

Равенство классов String следует тем же правилам, что и любой другой класс в Java;«==» будет истинным, если они ссылаются на один и тот же экземпляр, а equals () будет истинным, если они содержат одинаковые значения.

...