java 引用细节

今天,我在《java编程思想》上看见一个例子,这个例子向我展示了一些关于引用的细节


接下来是具体的代码:



class Tank{
	int level;
}
public class Assignment {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Tank t1=new Tank();
		Tank t2=new Tank();
		t1.level=9;
		t2.level=47;
		
		System.out.println("ti.level:"+t1.level+"   t2.level:"+t2.level);
		t1=t2;
		System.out.println("ti.level:"+t1.level+"   t2.level:"+t2.level);
		t1.level=500;
		System.out.println("ti.level:"+t1.level+"   t2.level:"+t2.level);
		t1.level=20;
		System.out.println("ti.level:"+t1.level+"   t2.level:"+t2.level);
		t2.level=555555;
		System.out.println("=======================================");
		System.out.println("ti.level:"+t1.level+"   t2.level:"+t2.level);
	}

}

output:

ti.level:9   t2.level:47
ti.level:47   t2.level:47
ti.level:500   t2.level:500
ti.level:20   t2.level:20
=======================================
ti.level:555555   t2.level:555555




我们注意看这个语句:

t1=t2;


这句话想表达什么意思呢?


这里是说将 t2 的引用连接到 t1,有c经验的同学可以将 t1 理解成一个指向t2的地址的二级指针

然后我们对t1操作其实就是对 t2 进行操作,我们对t2进行操作也会作用到t1上,因为 t1 最终指向了 t2



细心地同学可能发现了一个问题,那就是 t1 以前指向的那个对象怎么样了

由于t1 指向了 t2, t1 原来指向的地址就没有引用与其连接了,在GC用根节点搜索算法从此对象节点不能追溯到根节点时,会将它回收掉


猜你喜欢

转载自blog.csdn.net/u011546032/article/details/78187735