Сравнение Java с == двух строк равно false?
String parts - это строка[6]:
["231", "CA-California", "Sacramento-155328", "aleee", "Customer Service Clerk", "Alegra Keith.doc.txt"]
Но когда я сравниваю parts[0] с "231":
parts[0]
"231"
"231" == parts[0]
приведенный выше результат равен false,
Я в замешательстве, так что кто-нибудь может сказать мне, почему?
Переведено автоматически
Ответ 1
== Оператор сравнивает ссылки на объекты, а не значение Strings.
==
String
Чтобы сравнить значения Strings, используйте String.equals метод:
String.equals
"231".equals(parts[0]);
Это верно для любого другого объекта в Java - при сравнении значений всегда используйте equals метод, а не == оператор.
equals
equals Метод является частью Object и должен быть переопределен классами, которые будут сравниваться тем или иным способом.
Object
Ответ 2
Если строки не интернированы, то == проверяет идентификатор ссылки. Используйте:
вместо этого.
Ответ 3
== в Java сравниваются адреса объектов (в данном случае строк).
То, что вы хотите, это parts[0].equals("231")
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 заставит его сохранить строку в новой ячейке памяти.
new
Кстати, вы ВСЕГДА должны использовать .equals() для сравнения строк (для случаев, подобных этому)
.equals()