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

Узнайте больше о сравнении строк в Java с помощью оператора равно (=).

В этой статье вы узнаете, как сравнивать строки и проблемы, возникающие при сравнении строк с помощью  оператора equals to ( =).

Вам также могут понравиться: Что нужно делать, а чего нельзя делать в строках Java

Вступление

Это  String специальный класс в Java. Мы регулярно используем String в программах на Java, поэтому сравнение двух строк является обычной практикой в ​​Java. В этой статье я попытался ответить на самые распространенные вопросы о строке, например: «Как сравнить строки в Java?»

Сравнение строк очень полезно во время таких процессов, как аутентификация, сортировка, сопоставление ссылок и т. Д.

Я перечислил три разных способа сравнения строк в Java.

  1. Использование  equals() метода (сравнение контента)

  2. Использование  == оператора (сравнение ссылки на объект)

  3. Использование  compareTo() метода (сравнение лексикографически строк)

1.

Сравните строки, используя Equals() метод

Таким образом, я использую  .equals() метод экземпляра класса String. Первоначально  .equals() метод является методом  Object класса, класс String переопределяет его.

equals() Метод сравнения двух строк на равенство значений, являются ли они логически равными.

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

Я попросил программу сравнить строки, используя  equals() метод ниже:

Вывод:

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

== оператора

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

Когда вы сравниваете две строки с помощью  == оператора, он возвращает,  true если строковые переменные указывают на один и тот же объект Java. В противном случае он вернется  false.

Я дал программу на Java для сравнения, используя  == оператор ниже:

Вывод:

Проблемы с использованием 

== оператора для сравнения строк

Большинство начинающих Java-разработчиков допускают эту ошибку, сравнивая две строки с помощью ==оператора.

Логически, они должны проверить, содержит ли обе строки одну и ту же последовательность символов или нет.

В Java Strings  == оператор используется для проверки ссылки как на строковые объекты, так и на  equals() метод, используемый для проверки равенства значений обеих строк.

== — проверяет равенство ссылок

equals() — проверяет равенство значений

Когда мы присваиваем строковое значение строковой переменной, JVM проверит, присутствует ли строка с таким же значением в пуле строк или нет.

Если его нет в пуле строк, он будет добавлен в пул констант и будет возвращена ссылка на этот строковый объект.

Если он присутствует в пуле строк, возвращается ссылка на адрес памяти этого строкового объекта.

На следующем рисунке показано наглядное объяснение того же.

Выше « firstString» указывает на строку «coderolls» в пуле строк.

Если мы присваиваем равное значение другой строковой переменной, JVM проверяет, присутствует ли строка с этим значением в пуле строковых констант.

Поскольку строковый объект с этим значением уже создан на предыдущем шаге, другая строковая переменная начинает ссылаться на ранее созданный экземпляр строкового объекта.

На следующем рисунке показано графическое объяснение для ‘ firstString‘ и ‘ secondString‘, указывающих на строку «coderolls» в пуле строк.


Когда мы создаем строку с помощью 
new оператора, новый строковый объект создается и сохраняется в пространстве кучи Java.


Выше мы можем видеть «
firstString» и «
secondString», указывающие на coderollsстроку «
» в пуле строк, и «
thirdString», указывающие на «
coderolls» в пространстве кучи Java.

Возвращает отрицательное целое число, если строка аргумента лексикографически больше указанной строки, т.е. если строка аргумента следует за указанной строкой. (аргумент String> указанная строка)

Возвращает положительное целое число, если строка аргумента лексикографически меньше указанной строки, т.е. если строка аргумента предшествует указанной строке. (аргумент String <указанная строка)

Возвращает ноль, если обе строки лексикографически равны. (аргумент String = указанная строка)

Если вы хотите игнорировать оба случая compareToIgnoreCase() метода использования строки  .

Я дал программу для сравнения строк с использованием  compareTo() метода. Он также состоит из случая игнорирования случаев с  compareToIgnoreCase() методом.

Вывод:

Я написал подробную статью о  том, как сравнивать строки лексикографически в Java,  если вы хотите узнать больше.

Заключение

Мы можем сравнить строки, используя способы, приведенные ниже:

  1. Используя  equals() метод:  equals() метод в строках, используемый для проверки равенства строковых значений, содержат ли они одинаковую последовательность символов.
  2. Используя  == operator:  == operator используется для проверки ссылочного равенства двух строк, указывают ли они на один и тот же строковый объект.
  3. Используя 
    compareTo()
     метод:  compareTo() метод, используемый для проверки строк лексикографически, то есть в алфавитном порядке. Проверьте подробные статьи о  том, как сравнивать строки лексикографически .

Большинство начинающих Java-разработчиков допускают ошибки при сравнении строк. Они хотят проверить содержимое строки, но они используют  == оператор, чтобы проверить это.

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

Если у вас есть какие-либо вопросы о приведенных выше блоках кода, пожалуйста, запишите их в разделе комментариев ниже. Кроме того, дайте мне знать, если у вас есть какой-либо другой способ сравнить две строки в Java в разделе комментариев.

Эта статья первоначально опубликована на coderolls.com/compare-strings-in-java .

Дальнейшее чтение

Что нужно и чего не нужно в Java-строках

Учебники по Java-строкам: виртуозность Java-строк

Строки.

Часть 5 – сравнение строк.

Еще раз напомню, что в Java, все кроме примитивных типов являются ссылочными типами. Сравнение строк рассмотрим на уже более или менее знакомом нам примере когда мы рассматривали создание строк класса String.

Следует обратить особое внимание на сравнение строк s4 и s5, хотя их содержимое равно, но при сравнении s4==s5 мы получим false, так как это разные объекты и при использовании оператора сравнения (==) для строк, равно как и для любых других объектов, происходит сравнение ссылок, а данном случае они разные. Поэтому при сравнении объектов оператором == можно получить граблями по морде неожиданный эффект 🙂

Если же для сравнения использовать метод equals() класса String, то происходит сравнение содержимого объектов (строк). Так же надо учитывать что метод сравнения строк equals() регистро-зависимый, то есть строки «Hello» и «HELLO» для него будут разными.

Данная программа генерирует следующий вывод:

Для того чтобы сравнивать строки не зависимо от  регистра символов существует метод equalsIgnoreCase().

Для сравнения строк существуют еще методы compareTo(String str)  и compareToIgnoreCase(String str). Данные методы сравнивают лексическое значение строки со строкой заданной в параметре str, определяя сортируются ли она в алфавитном порядке раньше или позже строки в параметре str. Методы возвращают целое число типа int, которое может быть меньше, равно или больше нуля. Данное число определяется по следующим правилам:

  1. Сравниваются символы данной строки this и строки str с одинаковым индексом (т.е. посимвольное сравнение строк), пока не встретятся различные символы с индексом, допустим, k или пока одна из строк не закончится.
  2. В первом случае возвращается значение this. charAt(k) — str.charAt(k) , т. е. разность кодировок Unicode первых несовпадающих символов.
  3. Во втором случае возвращается значение this.length() — str.length() , т. е. разность длин строк.
  4. Если строки совпадают, возвращается 0, т.е. в той же ситуации, в которой метод equals() возвращает true.
  5. Если значение str равно null, возникает исключительная ситуация.

Сравнение символов происходит строго по их расположению в таблице кодировки стандарта Unicode, то есть эти методы не учитывают алфавитное расположение символов в локальной кодировке.

Русские буквы расположены в Unicode по алфавиту, за исключением одной буквы. Заглавная буква Ё находится перед всеми кириллическими буквами, ее код ‘ \u0401’ , а строчная буква ё — после всех русских букв, ее код ‘\u0451’ .

Если вас такое расположение не устраивает, задайте свое размещение букв с помощью класса RuleBasedCollator из пакета java.text.

Теперь небольшой пример:

Вывод этой программы следующий:

В первом случае –3 получилось поскольку код символа а равен 97, а код символа d равен 100, 97-100=-3. После этого мы просто сравнили одинаковые строки и поэтому результат равен нулю. Затем случай противоположный первому 100-97=3. И последний случай это когда вычлась длина строки abc0 из длины строки abc, что равно –1.

 

Здесь мы рассмотрели основные принципы сравнения строк целиком и граблей которые при этом могут быть. В классе String существует еще несколько методов сравнения частей строк, но их мы рассмотрим чуть позже.

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

Нравится (14)

Твитнуть

Делиться

196,19К Представления

Узнайте больше о сравнении строк в Java с помощью оператора равенства (=).

В этой статье вы узнаете, как сравнивать строки и какие проблемы возникают при сравнении строк с использованием оператора равно ( = ).

Вам также может понравиться: Что можно и чего нельзя делать со строками Java

Введение

String — это специальный класс в Java. Мы регулярно используем String в программах на Java, поэтому сравнение двух строк является обычной практикой в ​​Java. В этой статье я попытался ответить на самые распространенные вопросы о строке, например: «Как мне сравнивать строки в Java?»

Сравнение строк очень полезно во время таких процессов, как аутентификация, сортировка, сопоставление ссылок и т. д.

Я перечислил три различных способа сравнения строк в Java.

  1. Использование метода equals() (сравнение содержимого)

  2. Использование оператора == (сравнение ссылки на объект)

  3. Использование метода compareTo() (лексикографическое сравнение строк)

1. Сравнение строк с использованием метода

Equals()  

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

equals()   метод сравнивает две строки на равенство значений, независимо от того, равны ли они логически.

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

Я попросил программу сравнивать строки с использованием метода Equals () ниже:

Выход:


2. Строки с использованием

== Оператор

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

Когда вы сравниваете две строки с помощью оператора == , он возвращает true , если строковые переменные указывают на один и тот же объект Java. В противном случае возвращается false .

Я дал Java-программу для сравнения с использованием оператора == ниже:

Вывод:


сравнение двух строк с помощью

== оператор.

По логике, они должны проверить, содержит ли обе строки одинаковую последовательность символов или нет.

В Java Strings оператор == используется для проверки ссылки обоих строковых объектов, а метод equals() используется для проверки равенства значений обеих строк.

==  – проверяет равенство ссылок

equals()  – проверяет равенство значений

пул строк или нет. Если его нет в пуле строк, он будет добавлен в пул констант, и будет возвращена ссылка на этот строковый объект.

Если он присутствует в пуле строк, возвращается ссылка на адрес памяти этого строкового объекта.

На следующем изображении показано его пояснение.

Выше у нас есть « firstString », указывающая на строку «coderolls» в пуле строк.

Если мы присваиваем равное значение другой строковой переменной, JVM проверяет, присутствует ли строка с этим значением в пуле строковых констант или нет.

Поскольку строковый объект с этим значением уже создан на предыдущем шаге, другая строковая переменная начинает ссылаться на ранее созданный экземпляр строкового объекта.

На следующем изображении показано графическое объяснение для « firstString » и « secondString », указывающих на строку «coderolls» в пуле строк.


Когда мы создаем строку с помощью оператора new , новый строковый объект создается и сохраняется в пространстве кучи Java.

Выше мы видим, что « firstString » и « secondString » указывают на строку « coderolls » в пуле строк, а « ThirdString » указывают на « coderolls » в пространстве кучи Java. Он возвращает отрицательное целое число, если строка аргумента лексикографически больше указанной строки, т. е. если строка аргумента следует за указанной строкой. (строка аргумента > указанная строка)

Возвращает положительное целое число, если строка аргумента лексикографически меньше указанной строки, т. е. если строка аргумента предшествует указанной строке. (строка аргумента < указанная строка)

Возвращает ноль, если обе строки лексикографически равны. (строка аргумента = указанная строка)

Если вы хотите игнорировать регистры обеих строк, используйте метод compareToIgnoreCase() .

Я дал программу для сравнения строк с использованием метода compareTo() . Он также состоит из варианта игнорирования случаев с помощью метода compareToIgnoreCase() .

Вывод:

Я написал подробную статью о том, как лексикографически сравнивать строки в Java, если вы хотите узнать больше.

Заключение

Мы можем сравнивать строки, используя приведенные ниже способы:

  1. Используя equals()  метод: equals()  метод в строках, используемый для проверки равенства строковых значений, содержат ли они одинаковую последовательность символов.
  2. Использование оператора == : ==  оператор, используемый для проверки равенства ссылок двух строк, указывают ли они на один и тот же строковый объект.
  3. Использование compareTo()  метод: compareTo()  метод, используемый для лексикографической проверки строк, т. е. по алфавиту. Ознакомьтесь с подробными статьями о том, как сравнивать строки лексикографически.

Большинство начинающих Java-разработчиков допускают ошибки при сравнении строк. Они хотят проверить содержимое строки, но используют для этого оператор == .

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

Если у вас есть какие-либо вопросы о приведенных выше блоках кода, запишите их в разделе комментариев ниже. Кроме того, дайте мне знать, если у вас есть другой способ сравнить две строки в Java в разделе комментариев.

Первоначально эта статья была опубликована на странице coderolls.com/compare-strings-in-java.

Дополнительное чтение

Что можно и что нельзя делать со строками Java

Учебные пособия по работе со строками Java: станьте виртуозом работы со строками Java

струны Java (язык программирования) Типы данных

Опубликовано на DZone с разрешения Gaurav Kukade. Смотрите оригинальную статью здесь.

Мнения участников DZone являются их собственными.

Тенденции

  • Введение в Spring Cloud Kubernetes

  • HTTP и обмен сообщениями для связи микросервисов

  • 8 проверенных способов борьбы с программными рисками, связанными с окончанием срока службы

  • Использование Swagger для создания Java-оболочки PingFederate Admin API

404: Страница не найдена

Страница, которую вы пытались открыть по этому адресу, похоже, не существует. Обычно это результат плохой или устаревшей ссылки. Мы извиняемся за любые неудобства.

Что я могу сделать сейчас?

Если вы впервые посещаете TechTarget, добро пожаловать! Извините за обстоятельства, при которых мы встречаемся. Вот куда вы можете пойти отсюда:

Поиск
  • Ознакомьтесь с последними новостями.
  • Наша домашняя страница содержит самую свежую информацию о Java-разработке.
  • Наша страница «О нас» содержит дополнительную информацию о сайте, на котором вы находитесь, TheServerSide.com.
  • Если вам нужно, свяжитесь с нами, мы будем рады услышать от вас.

Поиск по категории

Архитектура приложения

  • Как выжить, когда царит развитие Waterfall

    Несмотря ни на что, методология Waterfall поддерживает бесчисленное количество команд разработчиков программного обеспечения. …

  • Необработанный, но растущий потенциал банковского обслуживания без ядра

    Несмотря на то, что банковское дело без ядра все еще является новой концепцией, оно демонстрирует большой потенциал для освобождения банков от жестких программных систем, которые. ..

  • Основы достижения высокой сплоченности и низкой связанности

    Легко сказать «высокая сплоченность, низкая связанность», но так ли легко это реализовать на практике? Мы рассмотрим некоторые основы …

Качество ПО

  • Тестовые фреймворки и примеры для модульного тестирования кода Python

    Модульное тестирование является важным аспектом разработки программного обеспечения. Команды могут использовать Python для модульного тестирования, чтобы оптимизировать преимущества Python…

  • Атрибуты эффективной стратегии тестирования базы данных

    Команды должны внедрить правильную стратегию тестирования базы данных для оптимизации результатов. Изучите эффективные атрибуты тестирования базы данных…

  • Обновления Java 20 Project Loom готовят почву для Java LTS

    Java 20 повторно инкубирует две функции масштабируемости Project Loom, что делает их главными кандидатами на то, чтобы стать стандартом в сентябрьском выпуске Java . ..

Облачные вычисления

  • Как работает маршрутизация на основе задержки в Amazon Route 53

    Если вы рассматриваете Amazon Route 53 как способ уменьшить задержку, вот как работает этот сервис.

  • 4 рекомендации, чтобы избежать привязки к поставщику облачных услуг

    Без надлежащего планирования организация может оказаться в ловушке отношений с облачным провайдером. Следуйте этим …

  • Подходит ли вам облачная стратегия?

    Стратегия, ориентированная на облачные технологии, имеет свои преимущества и недостатки. Узнайте, как избежать рисков и построить стратегию, которая …

Безопасность

  • 42% ИТ-руководителей попросили соблюдать конфиденциальность при нарушении

    Несмотря на то, что прозрачность и оперативная отчетность являются важными шагами после атаки, Bitdefender обнаружил, что многие ИТ-специалисты . ..

  • Цепочка уничтожения ICS: адаптация цепочки киберубийств к средам ICS

    Поскольку конвергенция IT/OT продолжает набирать обороты, нельзя игнорировать безопасность промышленных систем управления. Выполнение пен-тестов на основе…

  • Введение в ИДМЗ, демилитаризованную зону для ICS

    Создание IDMZ — демилитаризованной зоны между предприятием и промышленными сетями — может помешать операционной среде …

ПоискAWS

  • AWS Control Tower стремится упростить управление несколькими учетными записями

    Многие организации изо всех сил пытаются управлять своей огромной коллекцией учетных записей AWS, но Control Tower может помочь. Услуга автоматизирует…

  • Разбираем модель ценообразования Amazon EKS

    В модели ценообразования Amazon EKS есть несколько важных переменных. Покопайтесь в цифрах, чтобы убедиться, что вы развернули службу.