Junior
Разкажете ми за класа String в езика за програмиране Java.
sobes.tech AI
Отговор от AI
Класът String в Java представлява неизменяема последователност от символи.
Основни характеристики и особености:
- Неизменяемост (Immutability): След създаването на обект
String, съдържанието му не може да бъде променяно. Всяка операция, която изглежда като модификация на стринга (например конкатенация), всъщност създава нов обектString. Това увеличава сигурността и безопасността при работа с нишки. - Претоварване на оператора
+: За стрингове операторът+е претоварен за конкатенация. - Два начина за създаване:
- Чрез стринг литерал:
String s1 = "Hello";- създава се в пулата за стрингове. - Чрез оператора
new:String s2 = new String("World");- създава се в купчината (Heap), може да бъде създаден нов обект дори и при наличието на същия литерал в пула.
- Чрез стринг литерал:
- Пул за стрингове (String Pool): Област в купчината, където се съхраняват стрингови литерали за оптимизация на паметта. При създаване на стринг литерал JVM първо проверява пула. Ако такъв стринг вече съществува, връща препратка към съществуващия обект. Ако не, създава нов и го добавя към пула.
- Основни полезни методи:
length(): Връща дължината на стринга.charAt(int index): Връща символа на дадения индекс.substring(int beginIndex, int endIndex): Връща подстринг.contains(CharSequence s): Проверява дали стрингът съдържа дадена последователност от символи.indexOf(int ch)/indexOf(String str): Връща индекса на първото срещане на символ или подстринг.equals(Object anObject): Сравнява съдържанието на стринговете. Важно е да използвамеequals()за сравнение на съдържанието, а не==, който сравнява препратките към обектите.equalsIgnoreCase(String anotherString): Сравнява стрингове без значение за големината на буквите.replace(char oldChar, char newChar)/replace(CharSequence target, CharSequence replacement): Заменя символи или подстрингове.trim(): Премахва интервалите в началото и края на стринга.split(String regex): Разделя стринга на подстрингове по разделител.
Пример за създаване и някои операции:
// Създаване с литерал
String str1 = "Java";
// Създаване с new
String str2 = new String("Java");
// Конкатенация
String str3 = str1 + " is amazing";
// Сравнение на съдържанието (използваме equals, а не ==)
boolean areEqualContent = str1.equals(str2); // true
// Сравнение на препратки (използваме ==)
boolean areEqualReference = (str1 == str2); // false
// Дължина на стринга
int length = str3.length();
// Получаване на символ
char firstChar = str1.charAt(0); // 'J'
// Проверка за съдържание
boolean containsIs = str3.contains("is"); // true
Неизменяемостта на String може да доведе до неефективност при многократни модификации на стринга, тъй като всеки път се създава нов обект. За такива сценарии е по-добре да се използва StringBuilder или StringBuffer.