Pytanie z książki do SCJP:
http://img848.imageshack.us/img848/7588/skanv.png
Rozumiem, dlaczego c1 można usunąć GC, ale dlaczego c3 nie będzie usunięty (w końcu też zostanie przypisany null)?
Pytanie z książki do SCJP:
http://img848.imageshack.us/img848/7588/skanv.png
Rozumiem, dlaczego c1 można usunąć GC, ale dlaczego c3 nie będzie usunięty (w końcu też zostanie przypisany null)?
Co rozumiesz przez "obiekt c3"? Były utworzone tylko dwa obiekty, do jednego referencję trzymało przez chwilę c1, do drugiego referencję trzyma c2, w c3 był zawsze tylko i wyłącznie null.
Krótka piłka: GC może zebrać obiekt tylko wtedy, gdy nie można się do niego w żaden sposób dostać. Zmienne w Javie dzielą się na prymitywy i referencje. Prymitywy nie są obsługiwane przez GC, zbierane są razem z obiektem rodzicem. Jeśli chodzi o referencje to może być dowolnie wiele referencji do jednego obiektu i GC nie może usunąć obiektu dopóki istnieje chociaż jedna referencja do niego.
Wielkie dzięki za błyskawiczne odpowiedzi.
Faktycznie po obiekcie c3 nie ma GC co sprzątać. ; )
fantazyn napisał(a)
Rozumiem, dlaczego c1 można usunąć GC, ale dlaczego c3 nie będzie usunięty (w końcu też zostanie przypisany null)?
A gdzie w tym kodzie jest tworzony obiekt c3 przez new Cardboard() ??