- Как сравнить строки в Java? Сравниваем строки в Java
- Оператор для сравнения строк «==»
- Метод сравнения String equals()
- Метод сравнения String equalsIgnoreCase()
- Метод сравнения String compareTo()
- How to check if two Strings are Equal in Java ?
- Java – Check if two Strings are Equal
- Examples
- 1. Check if two strings are equal
- 2. Check if two strings are equal
- 3. Ignore case & check if strings are equal
- Conclusion
- Андроид, финты ушами.
- String.equals() always return true
- 6 Answers 6
Как сравнить строки в Java? Сравниваем строки в Java
В этой статье мы рассмотрим операторы и методы сравнения строк в Java. Поговорим про особенности использования оператора == , а также про методы equals(), equalsIgnoreCase и compareTo(), т. к. они используются чаще всего.
Оператор для сравнения строк «==»
В первую очередь, надо сказать, что этот оператор проверяет и сравнивает не значения, а ссылки. С его помощью вы сможете проверить, являются ли сравниваемые вами элементы одним и тем же объектом. Когда 2 переменные String указывают на тот же самый объект в памяти, сравнение вернёт true, в обратном случае — false.
В примере выше литералы интернируются компилятором, в результате чего ссылаются на один и тот же объект.
new String("Java") == "Java" // falseВышеприведённые переменные String указывают уже на различные объекты.
new String("Java") == new String("Java") // falseЗдесь тоже вышеприведенные переменные String указывают на различные объекты.
Итак, мы видим, что оператор == по сути, сравнивает не две строки, а лишь ссылки, на которые указывают строки.
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()
Сравнение строк с помощью equals позволяет проверять исходное содержимое строки. Метод возвращает true, когда параметр — объект String, представляющий собой ту же строку символов, что и объект:
Objects.equals("Java", new String("Java")) //trueКогда надо выполнить проверку, имеют ли 2 строки одинаковое значение, мы можем задействовать 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() вы выполните сравнение строк, что называется, лексикографически, причём различия регистра будут игнорированы. Здесь значение true возвращается в том случае, если аргумент является объектом 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(). Когда 2 строки совпадают, compareTo() вернёт значение «ноль» (результат = 0). Сравнивая 2 строки, он вернёт положительное целое число (результат > 0), если 1-й объект String следует за 2-й строкой. Соответственно, метод вернёт отрицательный результат (результат < 0), когда 1-й объект String будет предшествовать 2-й строке:
result1 == result2 :возвращается 0; result1 > result2 :возвращается положительное значение; result1 < result2 : возвращается отрицательное значение.Приведём пример:
На этом всё, очень надеемся, что этот материал будет вам полезен при сравнении строк в "Джава".
При подготовке статьи использовалась публикация «String Comparison in Java».
Хотите знать больше? Приходите на курс!
How to check if two Strings are Equal in Java ?
In this Java tutorial, you will learn how to check if two strings are equal using String.equals() , or String.equalsIgnoreCase() methods, with examples.
Java – Check if two Strings are Equal
You can check if two strings are equal, by considering case or not considering the case, in your Java application.
In this tutorial, we shall see how to check if two Strings are equal in Java using the method String.equals(String anotherString).
Also, we shall go through an example Java program to ignore the case of the characters in the string, and check if two Strings are equal.
Examples
1. Check if two strings are equal
In the following example, we defined two strings, and then used String.equals() method. If two string are equal, which is an yes in the below example, equals() method returns true, else false.
Example.java
When the program is run, the output to the console would be as shown below.
Are two strings equal : true2. Check if two strings are equal
This example is same as that of previous one, but here we are reading strings entered by the user in console input.
Example.java
When the program is run, the output to the console is as shown in the following.
Enter first string : good morning Enter second string : good morning Two strings are equal : true3. Ignore case & check if strings are equal
In this example, we shall ignore the case of the characters in two strings and check if strings are equal usgin equalsIgnoreCase() method of String class.
Example.java
Run the program. As two strings are equal when you ignore the case, equalsIgnoreCase() should return true for the above example.
Two strings are equal : trueConclusion
In this Java Tutorial, we learned how to check if two strings are equal in Java, by considering the case of characters or ignoring it.
Андроид, финты ушами.
Очень много ошибок возникает от того, что мы забываем, что строки – это объекты, а не примитивы. Поэтому они и ведут себя как объекты. И даже тип данных String пишется с большой буквы, как пишутся и другие объектные типы в отличие от примитивных типов (boolean, char, byte, short, int, long, float, double).
Замечу, что примитивные типы данных имеют своих дублёров в виде классов-обёрток, которые представляют эти типы, как объекты, снабжая их необходимыми методами. Поскольку такие типы являются объектами, они и пишутся с большой буквы (Boolean, Character, Byte, Short, Integer, Long, Float, Double).
Но поскольку строки — это объекты, а не примитивы, то вышеприведённой строкой мы сравниваем содержимое ссылок на строки, то есть адреса, по которым они располагаются в памяти. А так как два объекта не могут располагаться по одному и тому же адресу, то такое условие всегда будет возвращать false.
Следует обязательно использовать метод той строки, которая инициализирована реальным адресом, а не нулевым указателем, поскольку при вызове метода несуществующего объекта произойдёт исключение NullPointerExeption. Проверка на существование строки осуществляется так:
То есть, мы проверяем, имеется ли в данной ссылке какой-нибудь реальный адрес, или она инициализирована значением null. Такую проверку надо обязательно производить при получении данных из полей интерфейса, файлов настроек, баз данных и пр., поскольку там не всегда могут оказаться нужные вам данные.
Кроме проверки наличия самого строкового объекта можно осуществлять также проверку наличия содержимого в этом объекте. Такая проверка может осуществляться несколькими способами:
Первый вариант самый предпочтительный — просто проверяется длина строки в объекте строки. Можно добавить к проверке удаление начальных и конечных пробелов: (string1.trim().length() == 0).
Второй вариант возможен только начиная с версии API 9 (Android 2.3), но, по сути, это тот же первый вариант, записанный более наглядно.
Третий вариант самый плохой. Такая конструкция работает медленнее остальных, потому что в ней создаётся дополнительный объект пустой строки "", с содержимым которого и производится сравнение.
Часто требуется одновременная проверка строки на существование и на пустоту. Для этого можно использовать следующий метод:
public static boolean isZero(final String string)
Замечу, что создание нового строкового объекта происходит всякий раз, когда мы присваиваем строку переменной:
Объект строки является неизменяемым, и при попытке его изменить просто создаётся новый объект с новым значением:
String string1 = "Строка"; string1 = string1 + "Дополнительная строка";String string1 = "Строка"; string1 = "Другая строка";После выполнения этих действий в обоих случаях string1 будет указывать на совсем другую область памяти (на другой объект), чем он указывал до этого в первых строчках примеров.
String.equals() always return true
K want to compare two strings but the equals() method always return true , so the if statement always runs. why this happens?
resultString = "Test1"; String CompleteString = "Test"; if(CompleteString.equals(resultString));6 Answers 6
Your code is the equivalent to :
if(CompleteString.equals(resultString)) < //empty block >So if equals returns true, the empty block will be executed, and after the second block will be always executed whatever the if was false or true .
i made mistake because i didn't see that semicolon,sometimes happens but i don't understand the downvote? this sites made for such questions , some of them difficult to solve and some of them is easy!
Remove the ; after the if statement.
if(CompleteString.equals(resultString))it is because of the ';' at the end of if . Just remove and it will work !
if(CompleteString.equals(resultString));
It won't enter in if block it looks like a empty condition 🙂
remove ; from if(CompleteString.equals(resultString));
; means end of statement so even the if() loop returns false or true all the statements present after if() will be executed.So rowView.setBackgroundResource(R.color.listselect_red); will be executed all the time.
try this way
resultString = "Test1"; String CompleteString = "Test"; if(CompleteString.equals(resultString))// removed `;`