Sobes.tech
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