Как сравнивать строки в Java
Оператор ==
String str1 = "test";
String str2 = "test";str1 == str2; //true
new String("test") == str1; //false
Оператор == сравнивает ссылки. Так как в Java строки являются неизменяемыми объектами, поэтому при создании новой строки с такими же символами, Java, для экономии памяти, просто возьмет уже ранее созданный объект из string pool и запишет ее ссылку в переменную. Поэтому при вызове оператора == для str1 и str2 результат будет true.
Для того чтобы в любом случае создать новый объект, можно воспользоваться конструктором new String(“”test”), в этом случае результат будет false, так как ссылки на объекты уже будут разные
Оператор equals
String str1 = "test";
String str2 = "test";str1.equals(str2); // true
new String("test").equals(str1); //true
Метод equals сравнивает значения. Этот метод будет выполняться дольше, чем оператор == так как он будет сравнивать строки посимвольно. Но позволяет избежать ошибки в сравнении разных объектов с одинаковым строковым значением. Поэтому при вызове equals для str1, str2 или для new String(“test”) и str1 результат будет true.