Класс String включает несколько методов, которые сравнивают строки или подстроки внутри строк.
· Методы equals() и equalsIgnoreCase()
Чтобы сравнить две строки на равенство, нужно использовать метод equals:
String s1 = "Hello";
String s2 = "hello";
boolean isEqual = s1.equals(s2); // false
Этот метод возвращает true, если строки содержат одни и те же символы в одинаковом порядке, иначе возвращает false. В показано примере результатом будет false, так как этот метод чувствителен к регистру символов.
Чтобы выполнить сравнение, которое игнорирует различия в регистре, вызывается метод equalsIgnoreCase():
String s1 = "Hello";
String s2 = "hello";
boolean isEqual = s1.equalsIgnoreCase(s2); // true
В данном случае результат будет true.
· Методы startsWith() и endsWith()
Метод startsWith() определяет, начинается ли строка с указанной в параметре строки. Наоборот, метод endsWith() определяет, заканчивается ли строка указанной в параметре строкой. К примеру:
String s = "hello";
boolean a = s.startsWith("hel"); // true
boolean b = s.endsWith("llo"); // true
Вторая форма метода с помощью второго параметра (startIndex) позволяет определить начальную точку области сравнения:
boolean startsWith(String str, int startIndex)
Например:
String s = "hello";
System. out. println(s.startsWith("llo", 2)); // выведет true
Сравнение equals() и операции ==
Важно понять, что метод equals() и оператор == выполняют два различных действия. Метод equals() сравнивает символы внутри строк, а оператор == две переменные-ссылки, чтобы определить, обращаются они к одному и тому же объекту.
В простых типах, изученных ранее, таких как int, double, char и т.п., переменная сама хранила значение. В объектных типах, таких как String, и остальных, которые создаются при помощи операции new, переменная является ссылочной, то есть она хранит только адрес в памяти, где на самом деле хранятся данные.
В следующем примере показано, что два различных String-объекта могут содержать одни и те же символы, но ссылочные переменные на эти объекты не будут оцениваться как равные:
String s1 = new String("Hello");
String s2 = new String("Hello");
System. out. println(s1 + " равен " + s2 + " -> " + s1.equals(s2));
System. out. println(s1 + " == " + s2 + " -> " + (s1 == s2));
Вывод в консоль:
Hello равен Hello -> true
Hello == Hello -> false
Содержимое двух String-объектов идентично, но это – разные объекты. Переменные s1 и s2 не ссылаются на один и тот же объект, и поэтому, при сравнении с помощью операции == оказываются не равными.
Однако, если мы создаем строки без помощи ключевого слова new, результат будет другой:
String s1 = "Hello";
String s2 = "Hello";
System. out. println(s1 + " равен " + s2 + " -> " + s1.equals(s2));
System. out. println(s1 + " == " + s2 + " -> " + (s1 == s2));
Вывод в консоль:
Hello равен Hello -> true
Hello == Hello -> true
Это происходит, потому что на этапе компиляции компилятор видит одинаковые строки-константы “Hello”, при этом нет указания создавать новый объект (операция new ), поэтому в памяти создастся одна строка “Hello”, и на нее будут ссылаться обе переменные.






