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用根节点搜索算法从此对象节点不能追溯到根节点时,会将它回收掉


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值