Junior
String Pool дар Java барои чӣ лозим аст?
sobes.tech AI
Ҷавоб аз AI
Java-да String Pool зарурӣ аст барои:
- Эҳтиёҷи хотира: Аз эҷоди нусхаҳои дубораии литералҳои сатрӣ пешгирӣ мекунад. Агар як сатр бо ҳамон арзиш аллакай дар пул вуҷуд дошта бошад, ба он ишора мекунад.
- Оптимизатсияи иҷроиш: Муқоисаи литералҳои сатрӣ (
==) тезтар мешавад, зеро ишораҳоро муқоиса мекунад, на мазмуни сатрҳоро.
Ҳангоми эҷоди литералҳои сатрӣ (String s = "hello";), JVM аввал пулро санҷида, агар "hello" аллакай вуҷуд дошта бошад, s ба он ишора мекунад. Агар на бошад, объекти нав "hello" дар пул эҷод мешавад ва s ба он ишора мекунад.
Истифодаи конструктори new String("hello") ҳеҷ вақт объекти навро дар heap эҷод мекунад, новобаста аз пул. Барои илова кардан ба пул, бояд методи intern()-ро даъват кард.
// Мисоли коркарди String Pool
String s1 = "hello"; // Санҷиш дар пул, дар сурати зарурӣ эҷод мекунад, ба пул ишора мекунад
String s2 = "hello"; // Санҷиш дар пул, ёфтани мавҷуд, инчунин ба пул ишора мекунад
System.out.println(s1 == s2); // true - ишораҳо якхела
String s3 = new String("hello"); // Эҷоди объект нав дар heap
System.out.println(s1 == s3); // false - ишораҳо фарқ мекунанд
String s4 = s3.intern(); // Санҷиш дар пул барои мазмуни s3.
// Азбаски "hello" аллакай дар пул аст (аз s1/s2),
// s4 ба объект дар пул ишора мекунад.
System.out.println(s1 == s4); // true - s1 ва s4 ба як объект дар пул ишора мекунанд