Files
roma-dxunvrs 4fabe16272 04.09
2026-09-04 22:55:43 +03:00

65 lines
3.1 KiB
Markdown

Ссылочный тип
Содержит массив символов:
- Если входят в LATIN-1, то byte
- Если нет - char
Строки неизменяемые - любое изменение это новая строка
Хранятся в String Pool
Если такая же есть в String Pool - то новая не создается (интернирование строк)
## Интернирование
```Java
String s1 = "Hello World";
String s2 = "Hello " + "World";
// s1 == s2 - на этапе создания компилятор все понял и не стал засорять стринг пул
String s3 = new String("Hello World"); // специально выделили место под новую строку
// s1 != s3
s3 = s3.intern();
// s1 == s3
```
При создании компилятор может додуматься не создавать одинаковые строки несколько раз, но если изменить динамически, то все меняется
```Java
String s4 = "Hello";
s4 += " World";
// s4 != s1, но s4.equals(s1) - true
s4 = s4.intern();
// s4 == s1
```
## Конкатенация
Склеивание строк - `+`
Типы приводятся к строке
```Java
"Hello" + " " + "world" // Hello world
"Hello" + 5 + 10 // Hello510
"Hello" + (5 + 10) // Hello15
5 + 10 + "Hello" + 5 + 10 // 15Hello510
```
## StringBuilder
Хранит массив char и позволяет легко менять строку, пример паттерна [[Builder]]
```Java
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]]