Разница между сравнением строк с использованием методов == и .equals() в Java
И метод equals(), и оператор == используются для сравнения двух объектов в Java. == — это оператор, а equals() — это метод. Но оператор == сравнивает ссылку или расположение в памяти объектов в куче, независимо от того, указывают ли они на одно и то же место или нет.
Всякий раз, когда мы создаем объект с помощью оператора new, он создает новую ячейку памяти для этого объекта. Таким образом, мы используем оператор ==, чтобы проверить, совпадают ли место в памяти или адрес двух объектов.
Как правило, операторы equals() и «==» в Java используются для сравнения объектов с целью проверки на равенство, но вот некоторые различия между ними:
- Основное различие между методом .equals() и оператором == заключается в том, что один из них является методом, а другой — оператором.
- Мы можем использовать операторы == для сравнения ссылок (сравнения адресов ) и метод .equals() для сравнения содержимого . Проще говоря, == проверяет, указывают ли оба объекта на одно и то же место в памяти, тогда как .equals() оценивает сравнение значений в объектах.
- Если класс не переопределяет метод 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, и помогите другим гикам. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше.