Junior
Какво е пул за низове в Java?
sobes.tech AI
Отговор от AI
Pool на низове (String Pool) е област в heap (купчина) на JVM, където се съхраняват литералите на низове. Когато JVM срещне литерал на низ, първо проверява този pool. Ако низът вече съществува, връща препратка към съществуващия обект. Ако не, създава нов обект на низ в pool и връща препратка към него.
Предимства:
- Спестяване на памет: Няколко препратки могат да сочат към един и същ обект на низ в pool.
- Производителност: Сравняването на препратки (==) към низове в pool е по-бързо от сравняването на съдържанието на низовете (equals()).
Пример:
// Създава низ в pool (ако още не съществува)
String s1 = "hello";
// Връща препратка към същия обект "hello" от pool
String s2 = "hello";
// s1 и s2 сочат към един и същ обект
System.out.println(s1 == s2); // Ще изведе true
// Създава нов обект на низ "hello" в heap, не в pool
String s3 = new String("hello");
// s1 и s3 сочат към различни обекти
System.out.println(s1 == s3); // Ще изведе false
// Съдържанието на низовете е еднакво
System.out.println(s1.equals(s3)); // Ще изведе true
Методът intern() може да се използва за явно добавяне на низ, създаден с new String(), към pool или за получаване на препратка към съществуващ низ в pool с такова съдържание.
// Създава нов обект на низ "world" в heap
String s4 = new String("world");
// Добавя "world" към pool (ако още не е там) и връща препратка
String s5 = s4.intern();
// Създава низ в pool (препратка към същия обект, към който сега сочи s5)
String s6 = "world";
// s5 и s6 сочат към един и същ обект в pool
System.out.println(s5 == s6); // Ще изведе true