///EDIT. Najpierw proszę popatrzeć na PS2, bo chyba to zrozumiałem, ale nie wiem czy dobrze myślę.
Cześć. Mam pytanie odnośnie String Poola i tworzeniu obiektów typu String.
Przed chwilą myślałem, że gdy robie String b = "a"
to dodaje tylko do String Poola obiekt, jeżeli nie było takiego o takiej wartości. Gdy robie String a = new String("a")
to dodaje na stertę obiekt i tyle.
Przed chwilą wyczytałem, że gdy wywołam linijkę z new
: ** Two objects are created one for “a” in Heap and other in String pool area.**
Czyli, ma to wyglądać tak?
Co później będzie jak po String a = new String("a")
zrobię String b = "a"
?
Wg tej infografiki https://zapodaj.net/156e07c57744b.png.html](http://) żadnej strzałki nie ma do StringPoola po wykonaniu linijki z new
PS: Widzę, że nie podpisałem obrazka, kołko to StringPool, prostoką to Java Heap.
PS2:
Po kolejnych stronach chyba to to rozumiem. Gdy tworzymy Stringa za pomocą new
to tworzymy dwa obiekty - w StringPoolu i na stercie (tak wiem, że SP jest częścią sterty, więc tak jakby 2 obiekty na stercie tworzymy), ale obiekt ma w sobie referencję do obiektu na stercie. Jak tworzymy Stringa za pomocą String Literal, to się tworzy obiekt tylko w StringPoolu. Jeżeli wcześniej już był identyczny String w StringPoolu czy to stworzony za pomocą new czy bez new, to ma on w sobie referencję do tego właśnie obiektu. Czy tak to działa?
- screenshot-20190221153839.png (5 KB) - ściągnięć: 82
- screenshot-20190221153848.png (5 KB) - ściągnięć: 88