Sobes.tech
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 ба як объект дар пул ишора мекунанд