[JAVA]对象的别名问题
对于JAVA的基本数据类型,a=b就是把b的内容复制给a。若接着又修改了a,对b是没有影响的。
但是在为对象“赋值”的时候,情况发生了变化。对一个对象进行操作时,我们真正操作的是对象的引用。
下面对两种情况下的别名问题进行说名:
1、对象赋值引发的别名问题
示例代码:
class Range{
int level;
}
public class Assignment{
public static void main(String[] args) {
// TODO Auto-generated method stub
Range r1 = new Range();
Range r2 = new Range();
r1.level = 1;
r2.level = 2;
//打印对象赋值前的r1.level和r2.level
System.out.println("r1:"+r1.level+",r2:"+r2.level);
r1 = r2;
//打印对象赋值后的r1.level和r2.level
System.out.println("r1:"+r1.level+",r2:"+r2.level);
}
}
输出结果:
r1:1,r2:2
r1:2,r2:2
2、将对象作为参数传递给方法 产生的别名问题
示例代码:
class Letter{
char c;
}
public class PassObject {
static void Func(Letter l) {
l.c = 'z';
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//System.getProperties().list(System.out);
Letter l1 = new Letter();
l1.c = 'a';
//函数调用之前
System.out.println("1、1.c:"+l1.c);
Func(l1);
//调用func之后
System.out.println("2、1.c:"+l1.c);
}
}
输出结果:
1、1.c:a
2、1.c:z
[JAVA]对象的别名问题的更多相关文章
- 图解JAVA对象的创建过程
前面几篇博文分别介绍了JAVA的Class文件格式.JVM的类加载机制和JVM的内存模型,这里就索性把java对象的创建过程一并说完,这样java对象的整个创建过程就基本上说明白了(当然你要有基础才能 ...
- Java对象表示方式2:XStream实现对对象的XML化
上一篇文章讲到了使用Java原生的序列化的方式来表示一个对象.总结一下这种对象表示方式的优缺点: 1.纯粹的Java环境下这种方式可以很好地工作,因为它是Java自带的,也不需要第三方的Jar包的支持 ...
- Java是如何处理别名(aliasing)的
什么是Java别名(aliasing) 别名意味着有多个别名指向同一个位置,且这些别名有不同的类型. 在下面的代码例子中,a和b是两个不同的名字,有不同的类型A和B,B继承A B[] b = new ...
- 《精通Hibernate:Java对象持久化技术详解》目录
图书信息:孙卫琴 电子工业出版社 第1章 Java应用分层架构及软件模型: 1.1 应用程序的分层体系结构 1.1.1 区分物理层和逻辑层 1.1.2 软件层的特征 1.1.3 软件分层的优点 1.1 ...
- java——XML与java对象装换
-------------------------------Dog类--------------- publicclass Dog implements Serializable{ privates ...
- java对象与xml相互转换 ---- xstream
XStream是一个Java对象和XML相互转换的工具,很好很强大.提供了所有的基础类型.数组.集合等类型直接转换的支持. XStream中的核心类就是XStream类,一般来说,熟悉这个类基本就够用 ...
- 使用XStream注解实现Java对象与XML互相转换的代码示例
本文记录一下使用xstream这个api的注解特性对Java对象与XML字符串相互转换的一些代码示例. 我们很多人都处理过XML文件,也有很多非常成熟的第三方开源软件.如:jdom.dom4j等 ...
- Java对象转换成xml对象和Java对象转换成JSON对象
1.把Java对象转换成JSON对象 apache提供的json-lib小工具,它可以方便的使用Java语言来创建JSON字符串.也可以把JavaBean转换成JSON字符串. json-lib的核心 ...
- java对象表示方式--XStream
对象表示有各种各样的方式,序列化只是其中的一种而已.表示一个对象的目的无非就是为了对象<---->IO之间相互认识,至于怎么认识,那就有很多选择了.除了之前讲过的序列化,还可以选择将数据J ...
随机推荐
- webapi研究说明
首先定义公共的返回对象 /// <summary> /// 返回数据对象 /// </summary> public class ResponseItem<T> { ...
- Echart数据转换(水平数据变成垂直数据)
var originaldatalist = [ { name: "周一", data: [ { name: "直接访问", data: 320 }, { na ...
- Access查询时间段 .
access数据库cmd // SendTime是在Access数据库中是文本类型 StringBuilder sb = new StringBuilder(); sb.Append("SE ...
- JQuery 获取select被选中的value和text
html代码: <select name="test" > <option value="0">请选择</option> & ...
- 分布式监控系统(类zabbix)
目录: 为什么要做监控? 监控系统业务需求分析: 监控系统架构设计: 监控系统表结构设计: 一.为什么要做监控系统? 市面上已经有很多成熟的监控系统,例如zabbix.nagios,为什么自己开发监控 ...
- arguments.callee弃用与webuploader
使用最近使用ueditor的时候 谷歌浏览器下上传相同图片两次后第三次上传不了 而且取消了后会出现一个错误的图片.使用的ueditor是1.4.3 后来发现 这个是 webuploader插件的问题. ...
- HTML DOM 属性
innerHTML 属性 获取元素内容的最简单方法是使用 innerHTML 属性. innerHTML 属性对于获取或替换 HTML 元素的内容很有用. 实例 下面的代码获取 id="in ...
- HttpsessionListener 实现在线人数统计
最近在学servlet jsp,用的林信良先生的 jsp&servlet 这本书,在第五章有道在线人数统计的课后题完成,做一次记录. 实际效果: 一:用户类: package cc.openh ...
- caffe matlab matcaffe 加载输入网络net时报错
http://blog.csdn.net/xiaojiajia007/article/details/72850247
- 谷歌浏览器chrome的vuejs devtools 插件的安装
(推荐方法2) 安装方法1: 需正常打开chrome商店,搜索vuejs devtools 安装.chrome://extensions/ 开发者工具-扩展程序下启用: 方法2: github下载插件 ...