[JAVA]对象的别名问题
Posted zhengxl5566
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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]对象的别名问题的主要内容,如果未能解决你的问题,请参考以下文章