请看下面的代码:
public static void main(String[] args)
{
Test t1 = new Test();
t1.i = 1;
Test t0 = t1;
Test t2 = new Test();
t2.i = 2;
t0 = t2;
System.out.println(t1.i); //prints 1, I thought it would print 2
}
在我通过简单赋值从其他地方获取 t1 对象后,有什么方法可以更改它,而无需直接访问 t1 吗? (即 t1 = t0)
这是您的程序及其功能的说明。系统的每个状态都用虚线分隔显示。
注意当你这样做时会发生什么t0 = t1
。你以为这意味着从现在开始,t0
and t1
是同义词——每当您使用其中一个时,另一个就会受到影响。但实际上,t0
and t1
只是对同一对象的两个引用。
进行新的分配t0
只需将其从“蓝色”物体上拆下,然后将其重新连接到“紫色”物体上即可。
只要t0
and t1
两者都指向同一个对象,您对它们所指向的对象的内容所做的任何更改(例如t0.i = 5
) 会被另一个引用看到,因为它们都引用同一个对象。但是一旦你分配了其他东西t0
,它失去了与t1
。执行此操作后,更改将反映在t2
,它指向同一个“紫色”对象,而不是t1
它仍然指向旧的“蓝色”。
So:
- 如果您为引用分配一个新值 - 它不再像以前一样指向同一对象,并且任何先前的“双重引用”都会丢失。
- 如果您为content引用的属性,它将反映在查看同一对象的所有引用变量中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)