java 别名现象_引用与对象赋值时的别名现象
简明现代魔法 -> Java编程语言 -> 引用与对象赋值时的别名现象
引用与对象赋值时的别名现象
2009-09-08
要对一个对象进行操作,我们真正能操作的是该对象的引用。
所以,如果需要“将一个对象赋值给另外一个对象”,实际上只是改变其中一个对象的指向,使2个reference都指向heap里的同一个对象。
一个简单的程序
package Phase1;
class Digimon {
int attack;
int defence;
}
public class aliasing {
public static void main(String[] args){
// 从类 Digimon 创建两个对象:亚古兽、加鲁鲁兽
Digimon Agu = new Digimon();
Digimon Kalulu = new Digimon();
// 亚古兽的攻击力为9,加鲁鲁兽的攻击力为47
Agu.attack = 9;
Kalulu.attack = 47;
// 输出下攻击数值
System.out.println("亚古兽攻击力:" + Agu.attack + "; " +
"加鲁鲁兽攻击力:" + Kalulu.attack + "。 ");
// 对object加鲁鲁兽赋给object亚古兽(误),结果如何?(实际只改了引用,对象不变)
Agu = Kalulu;
// 其实就是让指向亚古兽的reference指向加鲁鲁兽的对象了
System.out.println("亚古兽攻击力:" + Agu.attack + "; " +
"加鲁鲁兽攻击力:" + Kalulu.attack + "。 ");
// 将亚古兽的攻击力修正为27吧(注意,Agu现在已经指向加鲁鲁兽对象了)
// 或者说,Agu现在也就是加鲁鲁兽
Agu.attack = 27;
// 看看输出测试吧
System.out.println("亚古兽攻击力:" + Agu.attack + "; " +
"加鲁鲁兽攻击力:" + Kalulu.attack + "。 ");
}
}
程序运行结果
亚古兽攻击力:9; 加鲁鲁兽攻击力:47。
亚古兽攻击力:47; 加鲁鲁兽攻击力:47。
亚古兽攻击力:27; 加鲁鲁兽攻击力:27。
当Agu = Kalulu;这一句代码执行之后,object亚古兽没有reference指向了,它将会被垃圾回收器自动清理。
这种特殊的现象称作“别名现象”,是Java操作对象的一种基本方式。
如果不想产生别名现象,可以这么写:Agu.attack = Kalulu.attack;
这样就可以保持两个对象彼此独立,而不是将两个reference同时绑定到同一个对象上面去。
java 别名现象_引用与对象赋值时的别名现象相关推荐
- JAVA移慎_java里面给对象赋值,慎用赋值符号(=) (转)
java里面给对象赋值,慎用赋值符号(=) (转)[@more@] 对于来说,注意变量名类似于指针,所以请慎用赋值符号(=)! 比如下面的代码: ArrayList alAll = new Array ...
- Java学习笔记_类和对象
·类:是一组相关属性和行为的集合,可以看成是一类事务的模板,使用事物的属性特征和行为特征来描述该类事物. ·属性:该事物的状态信息 ·行为:就是该事物能够做什么 ·对象:一类事物的具体体现,对象是类的 ...
- java list数组排序_浅谈对象数组或list排序及Collections排序原理
常需要对list进行排序,小到List,大到对自定义的类进行排序.不需要自行归并或堆排序.简单实现一个接口即可. 本文先会介绍利用Collections对List进行排序,继而讲到Collection ...
- java class类型参数_使用Class对象实例化Java类型参数/ generic
如何实例化Java泛型对象,该对象仅接受类或参数给出的类型参数宾语? 例如: 通常,可以使用以下语法实例化Integer对象的ArrayList: ArrayList foo = new ArrayL ...
- java polygon 用法_从Polygon对象的Java中更新几何图形
我正在尝试使用外部文件中的数据更新PostGIs几何列.某些多边形中的点数超过35k,并且ST_GeomFromText方法不起作用,因为文本字符串太长.我可以将这些点读入Polygon对象,我想做的 ...
- java同类型同字段名称对象赋值
import org.springframework.beans.BeanUtils; //第一个参数是源,第二个参数是目标. BeanUtils.copyProperties(origin, tar ...
- 对象赋值时this指向问题 obj1.say = obj2.say;obj1.say()
今天碰到一个问题,有如下的两个对象,问执行obj1.say()输出什么? var obj1 = ( function() {var inner = 'a-1'return {inner: 'a-2', ...
- ews java 新建邮箱_通过EWS发送电子邮件时使用自定义显示名称
我正在使用 EWS (Exchange Web Services) 与 Exchange 2010 在我们的组织内部生成和发送电子邮件 . 我们目前有一个邮箱/用户,我们所有的应用程序都通过这个邮箱/ ...
- c盘java文件误删_电脑清理C盘时误删重要文件如何恢复
我们都知道C盘是电脑的系统盘,储存很多重要的文件.windows系统在下载软件的时候,如果不更改存放位置,系统会默认放在C盘中,时间久了堆积大量文件,系统运行速度变慢.定期清理C盘文件可以加快运行速度 ...
最新文章
- 【Scratch】青少年蓝桥杯_每日一题_2.01_画五角星
- TensorFlow: Could not load requested Qt binding.
- 计算机屏幕偏白,电脑屏幕显示泛白怎么修正
- java方法带参数返回值_Java方法中的参数太多,第6部分:方法返回
- mysql5.6-5.7性能调优
- 2022新考纲408计组详细思维导图分享
- B站的热门视频要怎么同时批量下载保存到本地电脑中
- php 防挂马,织梦dedecms安全设置防挂马教程
- 吴恩达老师深度学习课程完整笔记
- 软件架构设计杂记: 好作品是改出来的,好的代码是不断重构打磨出来的, 心性是历经艰难困苦修炼出来的
- MS-DOS基本操作汇总
- 计算机二级c语言预测,计算机二级C语言考前预测上机试题及解析
- new BigDecimal比较大小
- input 验证码 密码 输入框
- 如何学习大数据?这才是完整的大数据学习体系!!
- 错误解决:failed calling webhook “dec-autonomy.xxx.io“: failed to call webhook:post
- 个人作品展示(开源)
- 关于ADPCM编码和PCM编码的wave文件通过Java进行相互转换
- 10分钟教你玩起来freemodbus
- 邮政储蓄银行 软件开发 2020暑期实习 面试回忆