Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

== vs equals()

== сравнивает значения примитивов и ссылки объектов; содержимое объектов сравнивает equals().

Доступно с: Java 1.0

Синтаксис

a == b  /  a.equals(b)

Примеры

Для примитивов == сравнивает значения, для объектов — «тот же ли это объект»:

void main() {
    int a = 1000;
    int b = 1000;
    IO.println(a == b);
 
    String s1 = "hi";
    String s2 = new String("hi");
    IO.println(s1 == s2);
    IO.println(s1.equals(s2));
}

Результат:

true
false
true

Ловушка с обёртками Integer: маленькие числа кэшируются, большие — нет:

void main() {
    Integer x = 127, y = 127;
    Integer p = 1000, q = 1000;
    IO.println(x == y);
    IO.println(p == q);
    IO.println(p.equals(q));
}

Результат:

true
false
true

Примечания

Правило: примитивы (int, double, char, boolean) сравнивают через ==, объекты (String, Integer, записи, списки) — через equals(). Исключение — значения enum, их сравнивают через ==. Чтобы equals() работал для своего класса, его нужно переопределить (вместе с hashCode()); у записей это сделано автоматически.

Дробные числа double из-за погрешности редко равны точно: 0.1 + 0.2 == 0.3 — false. Сравнивайте с допуском: Math.abs(a - b) < 1e-9.

См. также

  • String.equals() — Сравнивает содержимое двух строк.
  • Object.equals() — Сравнивает объекты по смыслу. По умолчанию работает как ==, поэтому в своих классах его переопределяют.
  • Objects.equals() — Сравнивает два объекта через equals(), безопасно для null.

В учебнике

  • Операторы — Арифметические операторы Java, целочисленное деление и остаток, составное присваивание, инкремент, сравнение и логические операторы.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.