同意#2的回答,其实这个问题是可以自己用一个小代码就可以解决的:
比如- Fu f=new Zi();
- Zi z=(Zi)f;
- System.out.println("z==f?"+"::"+(z==f));
复制代码 1.输出显示是真,那么说明确实地址是不变的。
2.不能认为引用就是一个地址值; 引用还定义了“作用域”(应该有更专业的说法),
3. 一个比喻:引用就像一个遥控器,而对象是这个遥控器控制的对象。
Zi z=new Zi(); 相当于你拿到了一个新版本的遥控器z 去控制新版本的对象。这个遥控器上按键可以实现新对象的很多新功能和旧功能。
Fu f=new Zi(); 相当于你只拿到了一个旧版本的遥控器f, 而去控制新版本的对象。这个控制器上的功能少,不能实现新的对象的很多新的功能只能实现旧的功能。
Zi z1=(Zi)f; 相当于把遥控器升级了,新的遥控器z1和z是一样的了
所以,引用通过地址找到对象,再判断作用域来调用对象方法的。 |