Разница между сравнением строк с использованием методов == и .equals() в Java

Опубликовано: 15 Сентября, 2022

И метод equals(), и оператор == используются для сравнения двух объектов в Java. == — это оператор, а equals() — это метод. Но оператор == сравнивает ссылку или расположение в памяти объектов в куче, независимо от того, указывают ли они на одно и то же место или нет.
Всякий раз, когда мы создаем объект с помощью оператора new, он создает новую ячейку памяти для этого объекта. Таким образом, мы используем оператор ==, чтобы проверить, совпадают ли место в памяти или адрес двух объектов.

Как правило, операторы equals() и «==» в Java используются для сравнения объектов с целью проверки на равенство, но вот некоторые различия между ними:

  1. Основное различие между методом .equals() и оператором == заключается в том, что один из них является методом, а другой — оператором.
  2. Мы можем использовать операторы == для сравнения ссылок (сравнения адресов ) и метод .equals() для сравнения содержимого . Проще говоря, == проверяет, указывают ли оба объекта на одно и то же место в памяти, тогда как .equals() оценивает сравнение значений в объектах.
  3. Если класс не переопределяет метод equals, то по умолчанию он использует метод equals(Object o) ближайшего родительского класса, который переопределяет этот метод. См. Зачем переопределять методы equals(Object) и hashCode()? в деталях.

Объяснение: Здесь мы создаем два объекта, а именно s1 и s2.

  • И s1, и s2 относятся к одним и тем же объектам.
  • Когда мы используем оператор == для сравнения s1 и s2, результат будет истинным, поскольку оба имеют одинаковые адреса в пуле строковых констант.
  • При использовании равенства результат истинен, потому что сравниваются только значения, указанные в s1 и s2.

Пул строк Java

s1 = «ПРИВЕТ»

s2 = «ПРИВЕТ»

Куча Java

s3 = «ПРИВЕТ»

Давайте разберемся в обоих операторах подробно:

Оператор равенства (==)

Мы можем применять операторы равенства для каждого примитивного типа, включая логический тип. Мы также можем применять операторы равенства для типов объектов.


Если мы применим == для типов объектов, тогда должна быть совместимость между типами аргументов (либо дочерний с родительским, либо родительский с дочерним или того же типа). В противном случае мы получим ошибку времени компиляции.

Java




// Java program to illustrate 
// == operator for incompatible data types
  
class Test {
    public static void main(String[] args)
    {
        Thread t = new Thread();
        Object o = new Object();
        String s = new String("GEEKS");
  
        System.out.println(t == o);
        System.out.println(o == s);
  
       // Uncomment to see error 
       System.out.println(t==s);
    }
}


Выход:

false
false
// error: incomparable types: Thread and String

Метод .equals()

В Java метод String equals() сравнивает две заданные строки на основе данных/содержимого строки. Если все содержимое обеих строк одинаковое, возвращается true. Если не совпадают все символы, возвращается false.


Объяснение: Здесь мы используем метод .equals, чтобы проверить, содержат ли два объекта одинаковые данные или нет.

  • В приведенном выше примере мы создаем 3 объекта Thread и 2 объекта String.
  • В первом сравнении мы проверяем, t1 == t3 или нет. Поскольку мы знаем, что и t1, и t3 указывают на один и тот же объект . Вот почему он возвращает true.
  • Во втором сравнении мы используем оператор «==» для сравнения строковых объектов, а не содержимого объектов. Здесь оба объекта различны, и, следовательно, результат этого сравнения — «Ложь».
  • Когда мы сравниваем 2 объекта String с помощью оператора .equals(), мы проверяем, содержат ли оба объекта одинаковые данные или нет.
  • Оба объекта содержат одну и ту же строку, т. е. GEEKS. Вот почему он возвращает true.

Эта статья предоставлена Ветури Лакшми Пратьюшей . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью с помощью write.geeksforgeeks.org или отправить ее по адресу review-team@geeksforgeeks.org. Посмотрите, как ваша статья появится на главной странице GeeksforGeeks, и помогите другим гикам. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше.