Строки
Ссылочный тип
Содержит массив символов:
- Если входят в LATIN-1, то byte
- Если нет - char
Строки неизменяемые - любое изменение это новая строка
Хранятся в String Pool
Если такая же есть в String Pool - то новая не создается (интернирование строк)
Интернирование
String s1 = "Hello World";
String s2 = "Hello " + "World";
// s1 == s2 - на этапе создания компилятор все понял и не стал засорять стринг пул
String s3 = new String("Hello World"); // специально выделили место под новую строку
// s1 != s3
s3 = s3.intern();
// s1 == s3
При создании компилятор может додуматься не создавать одинаковые строки несколько раз, но если изменить динамически, то все меняется
String s4 = "Hello";
s4 += " World";
// s4 != s1, но s4.equals(s1) - true
s4 = s4.intern();
// s4 == s1
Конкатенация
Склеивание строк - +
Типы приводятся к строке
"Hello" + " " + "world" // Hello world
"Hello" + 5 + 10 // Hello510
"Hello" + (5 + 10) // Hello15
5 + 10 + "Hello" + 5 + 10 // 15Hello510
StringBuilder
Хранит массив char и позволяет легко менять строку, пример паттерна Builder
StringBuilder sb = new StringBuilder("Hello");
sb.append("!");
String res = sb.toString();
// полезные методы reverse(), append(), insert(index, arg), delete(start, end), deleteCharAt(index),
Полезные методы:
reverse()- разворачивает цепочкуappend(arg)- добавляет в конецinsert(index, arg)- добавляет по указанному индексуdelete(start, end)- удаляет от start до end, end не включительноdeleteCharAt(index)- удаляет символ на индексеreplace(start, end, str)- заменяетcharAt(index)- символ по индексуsetCharAt(index, ch)- заменяет по указанному индексуsubstring(start, end)- возвращает подстрокуlength()- возвращает длинуsetLength(newLength)- обрезает или дополняет символы
Полезные методы строк
charAt(index)- символ на определенном индексеtoCharArray()- получить массив символовnew String(char[] arr)- можно создать из массива символовsubstring(start, end)- подстрока[start,end)length()- длинаsplit(str)- сплит по строкеString.join(delimiter, elements)- соединение массива по символу
Дополнительн: Character