Вопрос-ответ

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 можно переопределить, поэтому два разных объекта все равно могут быть равны.

Например:

String x = "hello";
String y = new String(new char[] { 'h', 'e', 'l', 'l', 'o' });

System.out.println(x == y); // false
System.out.println(x.equals(y)); // true

Кроме того, стоит знать, что любые две равные строковые константы (в первую очередь строковые литералы, но также комбинации строковых констант посредством конкатенации) в конечном итоге будут ссылаться на одну и ту же строку. Например:

String x = "hello";
String y = "he" + "llo";
System.out.println(x == y); // true!

Здесь x и y являются ссылками на одну и ту же строку, потому что y это константа времени компиляции, равная "hello".

Ответ 2

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

Ответ 3

Если мы с вами каждый зайдем в банк, каждый откроем совершенно новый счет и каждый внесет 100 долларов, то...


  1. myAccount.equals(yourAccount) это true потому, что они имеют одинаковое значение, но

  2. myAccount == yourAccount это false потому, что это не одна и та же учетная запись.

(При условии соответствующих определений Account класса, конечно. ;-)

Ответ 4

== - это оператор. equals - это метод, определенный в классе Object

== проверяет, имеют ли два объекта одинаковый адрес в памяти, а для примитива проверяет, имеют ли они одинаковое значение.метод equals, с другой стороны, проверяет, имеют ли два сравниваемых объекта одинаковое значение (в зависимости от того, как, конечно, метод equals был реализован для объектов. метод equals не может быть применен к примитивам (что означает, что если a является примитивом, a.equals(someobject) не допускается, однако someobject.equals(a) разрешен).

java