别名现象

别名现象

发生在为对象赋值的时候。对一个对象进行操作时,我们真正操作的是对对象的引用。所以倘若“将一个对象赋值给另一个对象”,实际是将“引用”从一个地方复制到另一个地方。这意味着假若对对象使用c=d,那么c和d都将指向原本只有d指向的那个对象。

因为赋值操作的是一个对象的引用,所以修改a的同时也改变了b。(原本a包含的对对象的引用,是指向一个值为9.9的对象。在对a赋值的时候,这个引用被覆盖,也就是丢失了;而那个不再被引用的对象会由“垃圾回收器”自动清理。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Tank{
float level;
}
public class test1 {
public static void main(String[] args) {
Tank a = new Tank();
Tank b = new Tank();
a.level = 9.9f;
b.level = 47.7f;
System.out.println("" + a.level + " " + b.level);
a = b;
System.out.println("" + a.level + " " + b.level);
a.level = 27.7f;
System.out.println("" + a.level + " " + b.level);
}
}

结果

image-20210614103327075

避免“别名现象”

1
a.level = b.level
感谢您的打赏.