Назад Зміст Вперед

10.2. Особливості літеральних Strings, поняття пула для Strings

Короткий огляд класу String

Клас String відноситься до найбільш вживаних класів із бібліотеки класів java. Це тому, що символьні рядки є дуже важливим засобом програмування.
По-перше, будь-який символьний рядок, насправді є об'єктом класу String. І навіть рядкові константи в дійсності є об'єктами класу String.

По-друге, об'єкти класу String є незмінними. Як тільки об'єкт буде створено, його вміст змінити неможливо.
Причини такого обмеження:
  • якщо потрібно змінити символьний рядок, то завжди можна створити новий.
  • в java визначені класи StringBuffer та StringBuilder, рівноправні класу String, які допускають зміну символьних рядків, що дозволяє виконувати всі звичні операції із символьними рядками.

Створення символьного рядка:

String myString = "Це тестовий символьний рядок";
Як тільки об'єкт класу String буде створено, його можна буде використати всюди.

Операція +

Для об'єктів класу String визначена операція +, призначена для зчіплювання рядків:
String myString = " Це " + " тестовий " + " рядок " + " Java. ";
Output: Це тестовий рядок Java.

Методи класу String

boolean equals (інший_рядок) - порівняння рядків;
int lenqth ( ) - довжина символьного рядка;
char charAt (індекс) - отримання символу за індексом.
Приклад
class StringDemo2 {
public static void main ( String args [ ] ){
String str1="Перший рядок";
String str2="Другий рядок";
String str3="Третій рядок";

System.out.println ( " Довжина рядка str1: " + str1.length ( ));
System.out.println ( " Символ за індексом 3 в рядку str1: " + str1.charAt(3));

if (str1.equals(str2))
System.out.println ( str1==str2);
else
System.out.println ( str1!=str2);

if (str1.equals(str3))
System.out.println ( str1==str3);
else
System.out.println ( str1!=str3);
}
}
Output:
Довжина рядка str1: 12
Символ за індексом 3 в рядку str1: ш
true
true

Що таке пул рядків в Java?

Пул рядків ( String Pool ) - це безліч рядків в купи ( Java Heap Memory ). String - особливий клас в java, за допомогою якого можна створювати рядкові об'єкти.

На діаграмі нижче - рядковий пул розташований в пам'яті Java Heap. Існують різні способи створення рядків, які впливають на розташування їх у пам'яті.
Сам строковий пул можливий тільки тому, що рядки в Java незмінні . Також пул рядків дозволяє зберегти пам'ять в Java Runtime, хоча це і вимагає більше часу на створення самої рядки.

Приклад роботи з пулом рядків

Коли використовуємо подвійні лапки, щоб створити новий рядок, то першим ділом йде пошук рядка з таким же значенням в пулі рядків. Якщо java такий рядок знайшла, то повертає посилання, в іншому випадку створюється новий рядок в пулі, а потім повертається посилання.

Однак, використання оператора new змушує клас String створити новий об'єкт String. Після цього можемо використовувати метод intern(), щоб помістити цей об'єкт у пул рядків або звернутися до іншого об'єкту з пулу рядків, який має таке ж значення.

Нижче наведена програма, яка демонструє роботу з пулом рядків:

StringPool.java Результат виконання програми: Що відбувається всередині програми чітко видно на діаграмі вище.













.