2011-08-16 17 views
6
Line 1: String x = "Java"; 
Line 2: x.concat(" Rules!"); 
Line 3: System.out.println("x = " + x); 

Wyjście jest "x = Java"Co się dzieje z LOST String obiektów

Linia 1: tworzy nowy obiekt String daje wartość "Java", oraz zapoznać x do niego.

Linia 2: Maszyna wirtualna tworzy drugi obiekt typu String z wartością "Reguły Java!" ale nic nie odnosi się do tego. II STRUKTURA STRIE JEST NATYCHMIAST UTRACONY; NIE MOŻESZ DOSTAĆ DO TEGO.

Gdy te Obiekty Ciągowe zostaną utworzone w Sterty, drugi obiekt będzie zbierany Śmieci.

+0

Zauważ, że '" x = "+ x' tworzy trzeci ciąg. – Thilo

Odpowiedz

5

Absolutnie. Taki jest sens zbierania śmieci.

7

Enos, w java Struny są niezmienne, więc należy przypisać

x = x.concat(" Rules"); 

dla drugiej linii i to będzie działać.

Drugi obiekt zostanie ostatecznie wygenerowany GC, ponieważ nie istnieje już jednostka odwołująca się do niego.

+2

Pytanie nie dotyczyło tego, że coś działa - Enosh chciał wiedzieć, co dzieje się z wynikiem String operacji concat - czy jest on tworzony i przechowywany gdzieś, czy nie. –

+0

Tak, wiem, ale wolałbym naprawić błąd, aby ludzie, którzy patrzą na to pytanie, nie pomylili się. – Dorpsidioot

0

Zgadzam się z wszystkimi innymi, że zbiera się śmieci. Ale przypuszczam, że kompilator może to w ogóle usunąć podczas kompilacji, ponieważ metody konkatencji mają wpływ tylko na lokalne pola metody i dlatego cała instrukcja nie ma sensu.

Powiązane problemy