@Patryk27
Dzięki za pomoc
Mam jeszcze jeden problem
Mam takie zadanie:
After line 8 runs. how many objects are eligible for garbage collection?
public class X
{
public static void main(String [] args)
{
X x = new X();
X x2 = m1(x); /* Line 6 */
X x4 = new X();
x2 = x4; /* Line 8 */
doComplexStuff();
}
static X m1(X mx)
{
mx = new X();
return mx;
}
}
I nie rozumiem dlaczego odpowiedź jest 1. Moim zdaniem powinno być 2.
W linii 6 jak jest wywoływana funkcja m1 to przecież przekazujemy referencję do obiektu x i w tej funkcji przypisujemy nową wartość więc już jeden obiekt zostaje bez referencji i gc może się nim zająć, a następnie w linii 8 też do x2 przypisujemy nową referencję i to jest drugi obiekt którym gc może się zająć