[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 ...
随机推荐
- [原]JSBSim 自动驾驶(浅出)
jsbsim的脚本文件分为几大类: 1.系统脚本: systems 包含通用飞机各部分功能模块组件以及自动飞行控件:Autopilot.xml 和 自动飞行的算法控件:GNCUtilities.x ...
- Python语法注意点
1. 在Python中定义函数,可以用必选参数.默认参数.可变参数.关键字参数和命名关键字参数,这5种参数都可以组合使用.但是请注意,参数定义的顺序必须是:必选参数.默认参数.可变参数.命名关键字参数 ...
- vue-先渲染dom载执行js
价格判断v-if=“dataList”有数据的时候才渲染
- kafka.common.FailedToSendMessageException: Failed to send messages after 3 tries. 最无语的配置
注意: 本文不谈废话,低级问题请自行检查. 我使用Java版本的Kafka Producer生产数据,但是抛出了这个异常.百思不得其解,明明防火墙配置,ZooKeeper,Kafka配置都是没问题的啊 ...
- pytorch构建自己的数据集
现在需要在json文件里面读取图片的URL和label,这里面可能会出现某些URL地址无效的情况. python读取json文件 此处只需要将json文件里面的内容读取出来就可以了 with open ...
- python 爬虫 记录
python3 爬虫需要安装:requests,beautifulsoup4,html5lib 带有中文的需要这样写,要不然就会出现乱码 html = response.content.decode( ...
- Python字符编码的发展、cmd寻找路径
字符编码的发展: ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示 ...
- jsp请求转发与重定向区别小结
1.当使用转发时,JSP容器将使用一个内部方法来调用目标页面,新的页面继续处理同一个请求,而浏览器不会知道这个过程; 2.重定向是第一个页面通知浏览器发送一个新的页面请求. 3.转发不改变URL,重定 ...
- c、c++函数随机
#inlcude<algorithm> next_permutation函数<全排列函数> #include<stdio.h> #include<algori ...
- LeetCode 46 全排列
题目: 给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3 ...