What's the difference between ".equals" and "=="? [duplicate]
В чем разница между ".equals" и "=="?
Сегодня я сменил лектора, и он заявил мне, что использует странный код. (Он сказал, что его лучше использовать .equals и когда я спросил почему, он ответил "потому что это так!")
Итак, вот пример:
if (o1.equals(o2)) { System.out.println("Both integer objects are the same"); }
Вместо того, к чему я привык:
if (o1 == o2) { System.out.println("Both integer objects are the same"); }
В чем разница между ними. И почему его способ (использование .equals) лучше?
Нашел это при быстром поиске, но я не могу понять смысла этого ответа:
Переведено автоматически
Ответ 1
В Java == всегда просто сравнивает две ссылки (то есть для непримитивов) - т. е. Проверяет, ссылаются ли два операнда на один и тот же объект.
Однако метод equals можно переопределить, поэтому два разных объекта все равно могут быть равны.
Кроме того, стоит знать, что любые две равные строковые константы (в первую очередь строковые литералы, но также комбинации строковых констант посредством конкатенации) в конечном итоге будут ссылаться на одну и ту же строку. Например:
Здесь x и y являются ссылками на одну и ту же строку, потому что y это константа времени компиляции, равная "hello".
Ответ 2
Оператор == сравнивает, являются ли объекты одним и тем же экземпляром. Оператор equals() сравнивает состояние объектов (например, если все атрибуты равны). Вы даже можете переопределить метод equals(), чтобы самостоятельно определять, равен ли объект другому.
Ответ 3
Если мы с вами каждый зайдем в банк, каждый откроем совершенно новый счет и каждый внесет 100 долларов, то...
myAccount.equals(yourAccount) это true потому, что они имеют одинаковое значение, но
myAccount == yourAccount это false потому, что это не одна и та же учетная запись.
(При условии соответствующих определений Account класса, конечно. ;-)
Ответ 4
== - это оператор. equals - это метод, определенный в классе Object
== проверяет, имеют ли два объекта одинаковый адрес в памяти, а для примитива проверяет, имеют ли они одинаковое значение.метод equals, с другой стороны, проверяет, имеют ли два сравниваемых объекта одинаковое значение (в зависимости от того, как, конечно, метод equals был реализован для объектов. метод equals не может быть применен к примитивам (что означает, что если a является примитивом, a.equals(someobject) не допускается, однако someobject.equals(a) разрешен).