Вопрос-ответ

Java comparison with == of two strings is false? [duplicate]

Сравнение Java с == двух строк равно false?

String parts - это строка[6]:

["231", "CA-California", "Sacramento-155328", "aleee", "Customer Service Clerk", "Alegra Keith.doc.txt"]

Но когда я сравниваю parts[0] с "231":

"231" == parts[0]

приведенный выше результат равен false,

Я в замешательстве, так что кто-нибудь может сказать мне, почему?

Переведено автоматически
Ответ 1

== Оператор сравнивает ссылки на объекты, а не значение Strings.

Чтобы сравнить значения Strings, используйте String.equals метод:

"231".equals(parts[0]);

Это верно для любого другого объекта в Java - при сравнении значений всегда используйте equals метод, а не == оператор.

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

Ответ 2

Если строки не интернированы, то == проверяет идентификатор ссылки. Используйте:

 "231".equals(parts[0]);

вместо этого.

Ответ 3

== в Java сравниваются адреса объектов (в данном случае строк).

То, что вы хотите, это parts[0].equals("231")

Ответ 4

Следующее выводит "true";

String s = "231";
if(s == "231")
{
System.out.println("true");
}
else
{
System.out.println("false");
}

Это связано с тем, что строки не изменяемы, и java попытается сэкономить как можно больше места, поэтому указывает на одну и ту же ссылку на память.

Однако следующее выводит значение "false":

String s = new String("231");
if(s == "231")
{
System.out.println("true");
}
else
{
System.out.println("false");
}

new заставит его сохранить строку в новой ячейке памяти.

Кстати, вы ВСЕГДА должны использовать .equals() для сравнения строк (для случаев, подобных этому)

java string