在JAVA中,以下哪句话会引起系统回收内存?

来源:百度知道 编辑:UC知道 时间:2024/05/22 09:30:09
设类U声明,及对象u和v的定义如下:
class U{
int x, int y;
U(int a, int b){x= a; y = b;}
void copy(U a){ x = a.x; y = a.y;}
}
U u = new U(1, 2), v = new U(2, 3);
在以下供选择的代码中,可能引起系统回收内存的是( )
A.u.x=v.y;u.y=v.x; B.u=v;
C.u.copy(v); D.v.copy(u);

java中gc回收的原则是没有引用指向这个对象,
那么这个对象就可能被垃圾回收器回收。符合这个原则的只有B选项
因为u=v,这时在栈中的引用u不再指向堆中的对象U(1,2)
而与引用V一起指向堆中的对象U(2,3),这时堆中的对象U(1,2)就没有引用指向
它了,他可能被系统垃圾回收。

其他几个选项都是堆中对象指向的属性发生了变化而已,对这个对象的引用依然存在,不可以被回收

对象的引用还在就不会被回收

同意1楼的,说的通俗易懂。

设类U声明,及对象u和v的定义如下:
class U{
int x, int y;
U(int a, int b){x= a; y = b;}
void copy(U a){ x = a.x; y = a.y;}
}
U u = new U(1, 2), v = new U(2, 3);
在以下供选择的代码中,可能引起系统回收内存的是( )
A.u.x=v.y;u.y=v.x; B.u=v;
C.u.copy(v); D.v.copy(u);
选B