[JAVA]对象的别名问题

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]对象的别名问题 的全部内容, 来源链接: utcz.com/z/393614.html

回到顶部