Как сравнивать строки в java
Перейти к содержимому

Как сравнивать строки в java

  • автор:

Изучаем Java: сравнение строк

Класс String Java содержит ряд методов для сравнения строк. Ниже приведены некоторые методы класса string java:

  • Оператор == ;
  • Метод equals() ;
  • equalsIgnoreCase ;
  • Метод compareTo() .

Обновлено: 2022-04-18 17:16:08 Вадим Дворников автор материала

Java string методы — использование оператора ==

Оператор == проверяет ссылки, а не значения. Это означает, что он проверяет, являются ли сравниваемые элементы одним и тем же объектом. Если две переменные String указывают на один и тот же объект в памяти, сравнение возвращает true . В противном случае — false :

"Java" == "Java" //true

Здесь литералы интернируются компилятором и таким образом ссылаются на один и тот же объект:

new String("Java") == "Java" // false

Приведенные выше переменные String указывают на разные объекты:

new String("Java") == new String("Java") // false

Приведенные выше переменные String также указывают на разные объекты.

Оператор ‘==’ не сравнивает строки в java, а только ссылки, на которые они строки.

class TestClass< public static void main (String[] args)< // ссылается на один и тот же объект, возвращает true if( "Java" == "Java" )< System.out.println("Statement is true"); >else < System.out.println("Statement is false"); >// указывает на другой объект, возвращает false if(new String("Java") == "Java")< System.out.println("Statement is true"); >else < System.out.println("Statement is false"); >// указывает на другой объект, возвращает false if(new String("Java") == new String("Java") )< System.out.println("Statement is true"); >else < System.out.println("Statement is false"); >> >
Statement is true Statement is false Statement is false

Метод String equals()

В Java сравнение строк equals проверяет исходное содержимое строки. Он возвращает true , если параметр — это объект String , который представляет собой ту же строку символов, что и объект:

Objects.equals("Java", new String("Java")) //true

Если нужно проверить, имеют ли две строки одинаковое значение, можно использовать Objects.equals() .

class TestClass< public static void main (String[] args) < String str1 = "Java"; String str2 = "Java"; String str3 = "ASP"; String str4 = "JAVA"; String str5 = new String("Java"); // оба равны, возвращают true if(str1.equals(str2))< System.out.println("Statement is true"); >else < System.out.println("Statement is false"); >// оба не равны, возвращают false if(str1.equals(str3))< System.out.println("Statement is true"); >else < System.out.println("Statement is false"); >// оба не равны, возвращают false if(str1.equals(str4))< System.out.println("Statement is true"); >else < System.out.println("Statement is false"); >// оба равны, возвращают true if(str1.equals(str5))< System.out.println("Statement is true"); >else < System.out.println("Statement is false"); >> >
Statement is true Statement is false Statement is false Statement is true

String equalsIgnoreCase

Метод equalsIgnoreCase() осуществляет Java сравнение строк лексикографически, игнорируя различия регистра. Значение true возвращается только тогда, когда аргумент является объектом String , который представляет ту же последовательность символов, что и объект. Если нужно проверить строки на равенство без учета регистра, лучше использовать метод equalsIgnoreCase класса String .

class TestClass< public static void main (String[] args)< String str1 = "Java"; String str2 = "JAVA"; // возвращает true, потому что оба равны без учета регистра if(str1.equalsIgnoreCase(str2))< System.out.println("Statement is true"); >else < System.out.println("Statement is false"); >// возвращает false при чувствительности к регистру if(str1.equals(str2))< System.out.println("Statement is true"); >else < System.out.println("Statement is false"); >> >
Statement is true Statement is false

Метод String compareTo()

Метод compareTo() используется, когда нужно определить порядок строк лексикографически. Он сравнивает значения char аналогично методу equals() . Если две строки точно совпадают, метод compareTo() вернет значение 0 ( результат = 0 ). При сравнении двух строк Java он возвращает положительное ( результат > 0 ) целое число, если первый объект String следует за второй строкой. Метод compareTo() возвращает отрицательный результат ( результат < 0 ), если первый объект String предшествует второй строке:

result1 == result2 :возвращает 0; result1 > result2 :возвращает положительное значение; result1 < result2 : возвращает отрицательное значение.
class TestClass < public static void main (String[] args) < String str1 = "Java"; String str2 = "Java"; String str3 = "ASP"; int val = 0; val = str1.compareTo(str2); System.out.println(val); val = str1.compareTo(str3); System.out.println(val); val = str3.compareTo(str1); System.out.println(val); >>
0 9 -9

Вадим Дворников автор-переводчик статьи « String Comparison in Java »

Как сравнить две строки в java

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

Сравнение строк с помощью equals() позволяет проверять исходное содержимое строки. Метод возвращает true , когда параметр — объект String , представляющий собой ту же последовательность символов, что и переданный объект:

String str1 = "Java"; String str2 = "Java"; String str3 = "C++"; if (str1.equals(str2))  System.out.println("Statement is true"); > else  System.out.println("Statement is false"); > // => Statement is true if(str1.equals(str3))  System.out.println("Statement is true"); > else  System.out.println("Statement is false"); > // => Statement is false 

3.1. Java примеры – Сравнить две строки

В следующем примере сравниваются две строки, с помощью методов compareTo(String), compareToIgnoreCase(String) и compareTo(object String) строкового класса (String Class), которые возвращают ASCII разность первых нечетных символов сравниваемых строк.

public class Compare < public static void main(String args[])< String firstStr = "Привет Мир!"; String secondStr = "привет мир!"; Object objStr = firstStr; System.out.println(firstStr.compareTo(secondStr)); System.out.println(firstStr.compareToIgnoreCase(secondStr)); System.out.println(firstStr.compareTo(objStr.toString())); >> 

Результат

Получим следующий результат:

-32 0 0 

Сравнение строк с помощью equals()

Метод equals() – сравнивает строку с указанным объектом. Результат является истинным тогда и только тогда, когда аргумент не является нулевым и является строковым объектом, который представляет ту же последовательность символов, что и этот объект.

public class Compare < public static void main(String []args)< String str1 = "proglang"; String str2 = "proglang"; String str3 = new String ("Prog Lang"); System.out.println(str1.equals(str2)); System.out.println(str2.equals(str3)); >> 

Получим следующий результат:

true false 

Сравнение строк с помощью оператора ==

public class Compare < public static void main(String []args)< String str1 = "proglang"; String str2 = "proglang"; String str3 = new String ("Prog Lang"); System.out.println(str1 == str2); System.out.println(str2 == str3); >> 

Получим следующий результат:

true false 

Оглавление

  • 1. Java примеры – Использование кода на практике
  • 2. Java примеры – Окружающая среда
  • 2.1. Java примеры – Скомпилировать файл
  • 2.2. Java примеры – Установить путь к нескольким классам
  • 2.3. Java примеры – Отладка java-файла
  • 2.4. Java примеры – Установить путь к классу
  • 2.5. Java примеры – Просмотреть текущий путь класса
  • 2.6. Java примеры – Установить назначение файла класса
  • 2.7. Java примеры – Запустить скомпилированный java-файл класса
  • 2.8. Java примеры – Узнать версию Java
  • 2.9. Java примеры – Установить путь к классу в .jar-файле или .zip-файле
  • 3. Java примеры – Строки
  • 3.1. Java примеры – Сравнить две строки
  • 3.2. Java примеры – Найти последнее вхождение подстроки внутри подстроки
  • 3.3. Java примеры – Удалить нужный символ из строки
  • 3.4. Java примеры – Заменить символ в строке
  • 3.5. Java примеры – Вывод в обратном порядке
  • 3.6. Java примеры – Нахождение символа или слова в строке
  • 3.7. Java примеры – Разбиение строки на слова и символы
  • 3.8. Java примеры – Преобразование строки в верхний регистр
  • 3.9. Java примеры – Найти слово в строке
  • 3.10. Java примеры – Сравнить производительность создания строки
  • 3.11. Java примеры – Оптимизировать создание строк
  • 3.12. Java примеры – Форматирование строк
  • 3.13. Java примеры – Конкатенация строк
  • 3.14. Java примеры – Определить код Юникода символа в строке
  • 3.15. Java примеры – Буферизация строк
  • 4. Java примеры – Массивы
  • 4.1. Java примеры – Сортировка массива и поиск элемента
  • 4.2. Java примеры – Метод сортировки массива, вставить элемент в массив
  • 4.3. Java примеры – Размер двумерного массива
  • 4.4. Java примеры – Обратный порядок массива, переворачиваем массив
  • 4.5. Java примеры – Как выводить массивы и двумерные массивы в консоль
  • 4.6. Java примеры – Найти максимальный и минимальный элемент массива
  • 4.7. Java примеры – Соединить два массива в один
  • 4.8. Java примеры – Как заполнить массив числами
  • 4.9. Java примеры – Увеличить массив после инициализации
  • 4.10. Java примеры – Сравнение двух массивов
  • 4.11. Java примеры – Удаление элемента из массива
  • 4.12. Java примеры – Удаление массива из другого массива
  • 4.13. Java примеры – Одинаковые элементы массивов
  • 4.14. Java примеры – Поиск в массиве
  • 4.15. Java примеры – Равенство двух массивов
  • 4.16. Java примеры – Сравнить массивы
  • 5. Java примеры – Дата и время
  • 5.1. Java примеры – Форматирование времени в формате AM-PM
  • 5.2. Java примеры – Получение названия и номера текущего месяца
  • 5.3. Java примеры – Получить текущее время в часах и минутах
  • 5.4. Java примеры – Вывести текущее время и дату
  • 5.5. Java примеры – Вывести текущее время в 24-часовом формате
  • 5.6. Java примеры – Получить текущий месяц
  • 5.7. Java примеры – Получить текущие секунды
  • 5.8. Java примеры – Получить короткое название месяца
  • 5.9. Java примеры – Получить день недели
  • 5.10. Java примеры – Добавление времени к дате
  • 5.11. Java примеры – Отображение времени в формате другой страны
  • 5.12. Java примеры – Отображение времени на разных языках
  • 5.13. Java примеры – Прокрутить часы и месяцы
  • 5.14. Java примеры – Получить номер недели и месяц в году
  • 5.15. Java примеры – Форматы текущей даты
  • 6. Java примеры – Методы
  • 6.1. Java примеры – Перезагрузка методов
  • 6.2. Java примеры – Вывод массива с использованием метода
  • 6.3. Java примеры – Решение Ханойской башни
  • 6.4. Java примеры – Последовательность чисел Фибоначчи
  • 6.5. Java примеры – Вычисление факториала числа
  • 6.6. Java примеры – Переопределение метода
  • 6.7. Java примеры – Вывод массива с использованием метода
  • 6.8. Java примеры – Использование оператора break
  • 6.9. Java примеры – Использование оператора continue
  • 6.10. Java примеры – Использование метки в методе
  • 6.11. Java примеры – Использование операторов enum и switch
  • 6.12. Java примеры – Использование конструктора enum

Как сравнивать строки в Java?

В своей программе я использовал оператор == для сравнения строк. Но я наткнулся на баг, и при замене == на equals он пропал.​​​​​​​​​​ Следует избегать оператора == ? Когда его можно использовать, а когда нет? В чём разница?

Отслеживать
задан 17 апр 2015 в 15:05
32.1k 19 19 золотых знаков 80 80 серебряных знаков 106 106 бронзовых знаков

Добавил ещё один "канонический" ответ. На английском SO это самый популярный вопрос как цель для закрытия дубликатов. Преимущественно перевод и компиляция How do I compare strings in Java?, плюс ещё по мелочи.

17 апр 2015 в 15:07
Школа на Хэшкоде 🙂
17 апр 2015 в 15:08
@AndrewBystrov Да. См. ru.stackoverflow.com/help/self-answer
17 апр 2015 в 15:30

@AndrewBystrov на SO это нормально, хотя я думал что "самоответ" синхронно с вопросом это не комильфо, но в правилах противопоказаний нет

17 апр 2015 в 18:49

@Discord хз. Может я и не прав, но лучше сделать один "эталонный" ответ и вопрос и закрывать на него все остальные точно такие же вопросы. Если возникает желание добавить по теме, то улучшать "эталонный" ответ.

23 фев 2016 в 13:27

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Оператор == сравнивает ссылки.

Метод equals сравнивает значения.

Следовательно, если вы хотите сравнить строки на равенство, следует использовать equals .

Однако в некоторых случаях строки гарантированно представлены одним и тем же объектом благодаря пулу строк (string interning). Эти случаи явно описаны в спецификации языка Java.

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

// Эти строки имеют одно и тоже же значение new String("test").equals("test") // --> true // . но это разные объекты new String("test") == "test" // --> false // . эти строки тоже разные объекты new String("test") == new String("test") // --> false // . но эти строки указывают на один и тот же объект, // потому что компилятор добавляет все литералы в пул. "test" == "test" // --> true // Конкатенация литералов тоже происходит на стадии компиляции, // поэтому они указывают на один объект "test" == "te" + "st" // --> true // но вызов substring() происходит во время выполнения, // в результате получаются разные объекты. "test" == "!test".substring(1) // --> false // Строки из пула могут быть получены с помощью вызова intern(). "test" == "!test".substring(1).intern() // --> true 

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

Остерегайтесь вызова equals на null ! Оператор == прекрасно сравнивает строки, если одна или более из них равна null , но вызов метода equals на строке, равной null , приведёт к исключению.

Для сравнения строк, которые могут быть равны null , вы можете воспользоваться следующим методом:

public static boolean equals(String str1, String str2)

Он присутствует в некоторых сторонних библиотеках, например, в Apache Commons.

Если вы пользуетесь современными средами разработки, то они предупредят, если вы попытаетесь сравнить строки с помощью оператора == . Всегда обращайте внимание на подобные предупреждения.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *