65 lines
3.1 KiB
Markdown
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]] |