Sobes.tech
Junior

За какво е необходим String Pool в Java?

sobes.tech AI

Отговор от AI

String Pool в Java е необходим за:

  • Спестяване на памет: Предотвратява създаването на дублиращи се литерални низове. Ако низ с същата стойност вече съществува в пулата, се използва препратка към него.
  • Оптимизация на производителността: Сравнението на низови литерали (==) става бързо, тъй като се сравняват препратки, а не съдържанието на низовете.

При създаване на низови литерали (String s = "hello";), JVM първо проверява String Pool. Ако "hello" вече съществува, s се препраща към съществуващия обект. Ако не, се създава нов обект "hello" в пула, и s се препраща към него.

Използването на конструктора new String("hello") винаги създава нов обект String в хипа, независимо от String Pool. За да го добавите към пула, трябва да извикате метода intern().

// Пример за работа с String Pool

String s1 = "hello"; // Проверява пула, създава ако е необходимо, препраща към пула
String s2 = "hello"; // Проверява пула, намира съществуващия, също препраща към пула

System.out.println(s1 == s2); // true - препратките са еднакви

String s3 = new String("hello"); // Създава нов обект в хипа

System.out.println(s1 == s3); // false - препратките са различни

String s4 = s3.intern(); // Проверява пула за съдържанието на s3.
                         // Тъй като "hello" вече е в пула (от s1/s2),
                         // s4 се препраща към обекта в пула.

System.out.println(s1 == s4); // true - s1 и s4 се препращат към един и същи обект в пула