Junior
178
Какво знаеш за класа String в Java?
Отговор от AI
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); // Изход: Hello World