Назад к вопросам
Junior
67
questionbank
Что ты знаешь о классе String в Java?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
String в Java — это неизменяемый (immutable) класс, представляющий последовательность символов.
Ключевые особенности:
- Неизменяемость: После создания объекта
String, его содержимое не может быть изменено. Любая операция, которая выглядит как изменение строки, фактически возвращает новый объектString. Это делает объектыStringпотокобезопасными. - Пул строк (String Pool): Java поддерживает пул строк. Когда создается строковый литерал (например,
"hello"), JVM сначала проверяет пул строк. Если такая строка уже существует, возвращается ссылка на существующий объект. Если нет, создается новый объект в пуле. При использовании конструктораnew String("hello"), новый объект всегда создается за пределами пула. - Перегрузка оператора
+: Оператор+перегружен для конкатенации строк. Компилятор может оптимизировать конкатенацию с использованиемStringBuilderилиStringBufferдля повышения производительности. - Реализация интерфейсов:
Stringреализует интерфейсыSerializable,Comparable<String>иCharSequence. - Методы: Класс
Stringпредоставляет множество полезных методов для работы со строками:length(),charAt(),substring(),indexOf(),equals(),equalsIgnoreCase(),startsWith(),endsWith(),trim(),replace(),split()и другие.
Примеры создания строк:
// Создание через литерал (использует пул строк)
String str1 = "Hello";
// Создание через конструктор (создает новый объект вне пула)
String str2 = new String("World");
// Создание из массива символов
char[] chars = {'J', 'a', 'v', 'a'};
String str3 = new String(chars);
Сравнение строк:
equals(): Сравнивает содержимое строк.==: Сравнивает ссылки на объекты. Для строковых литералов одинаковое содержимое обычно означает одинаковые ссылки из пула строк, но для объектов, созданных сnew String(),==будетfalseдаже при одинаковом содержимом.
String s1 = "java";
String s2 = "java";
String s3 = new String("java");
System.out.println(s1 == s2); // true (оба из пула строк)
System.out.println(s1 == s3); // false (s3 - новый объект)
System.out.println(s1.equals(s3)); // true (сравнивает содержимое)
Для изменения строк в Java используются классы StringBuilder (не синхронизирован, для однопоточной среды) и StringBuffer (синхронизирован, для многопоточной среды), которые являются изменяемыми.
// Пример с StringBuilder
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
String result = sb.toString(); // Преобразуем обратно в String
System.out.println(result); // Output: Hello World