В Java для непримитивных типов оператор ==
сравнивает ссылки, а не значения.
Если вы создаете кучу эквивалентных Строковые литералы, как:
String sLit1 = "test";
String sLit2 = "test";
(sLit1 == sLit2)
будет true
, так как Java не выделяет новую память для каждой новой строки буквальным, он просто указывает на их все к тому же местоположение в памяти. Тем не менее, при создании строкового объекта:
String sObj = new String("test")
Java всегда создает новый объект, который занимает новое место в памяти. Таким образом, sLit1 == sObj
всегда будет false
.
Это означает, что ==
дает true
тогда и только тогда, когда два аргумента ссылаются на один и тот же объект. Чтобы сравнить строки, используйте метод equals
, как в (sObj.equals(sLit1))
.
Это было задано так много раз прежде ... Например: http://stackoverflow.com/questions/10536670/how-many-string-objects-will-be-created-by-jvm-version- 1-6. У этого есть еще лучшие ответы: http://stackoverflow.com/questions/1881922/questions-about-javas-string-pool –