String pool vs Constant pool

To pytanie może być głupie. Ale jestem kompletnie zdezorientowany. Potrzebujesz pomocy w zrozumieniu puli ciągów i stałej puli. Jasne, co do internowania sznurków i puli sznurków.

  String s1 = "Hello";
  String s2 = "Hello"; 

Teraz oba odnoszą się do tego samego obiektu z powodu internowania.(tzn.) ponieważ łańcuchy znaków są niezmienne, tworzony jest tylko jeden obiekt i oba odnoszą się do tego samego obiektu.

A także stała Pula jest czymś, co zawiera wszystkie stałe (integer,string,itd.) zadeklarowane w klasie. Jest specyficzny dla każdej klasy.

 System.out.println("Hello");  //I believe this Hello is different from above.
Moje pytania to:]}
  1. czy string pool odnosi się do puli stałych obiektów string w stałej puli?
  2. Jeśli tak, to czy String pool jest wspólny w aplikacji czy specyficzny dla klasy?
Dzięki.
Author: yfklon, 2014-04-23

2 answers

Moje pytania to:]}
  1. czy string pool odnosi się do puli stałej obiektu string w stałej puli?
Nie.

"stała Pula" odnosi się do specjalnie sformatowanej kolekcji bajtów w pliku klasy, który ma znaczenie dla klasy Java loader. "Ciągi" są serializowane , nie są obiektami Javy. Istnieje również wiele rodzajów stałych, nie tylko ciągów.

Patrz Rozdział 4.4 stała stół bilardowy

Instrukcje Wirtualnej Maszyny Java nie opierają się na układzie klas, interfejsów, instancji klas lub tablic w czasie wykonywania. Zamiast tego instrukcje odnoszą się do symbolicznych informacji w tabeli constant_pool.

Natomiast " String pool "jest używany w czasie wykonywania (nie tylko podczas ładowania klas), zawiera tylko ciągi, a" string " w Puli łańcuchów są obiektami java. "String pool" jest bezpieczną dla wątku słabą mapą od instancji java.lang.String do java.lang.String instancje używane do intern strings.

Rozdział 3.10.5. Ciąg liter mówi

Literał Łańcuchowy jest odniesieniem do instancji klasy String (§4.3.1, §4.3.3).

Co więcej, literał Łańcuchowy zawsze odnosi się do tej samej instancji klasy String. Dzieje się tak dlatego, że literały ciągów-lub, bardziej ogólnie, ciągi, które są wartościami stałych wyrażeń (§15.28) - są "internowane", aby dzielić unikalne instancje, używając metody String.intern.

 12
Author: Mike Samuel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-23 19:12:43

Istnieje tylko jedna pula łańcuchów, a wszystkie literały łańcuchów są automatycznie internowane.
Istnieją również inne baseny do autoboxingu i tym podobne.

Stała puli jest tam, gdzie te literały są umieszczane dla klasy.

 3
Author: Deduplicator,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-23 19:08:02