在对一个对象进行操作时,我们操作的实际是对对象的引用。所以倘若是“将一个对象赋值给另一个对象”,实际是将引用从一个地方复制到了另一个地方。这意味着,假如对对象使用 c = d ,那么c和d都是指向原本只有d指向的哪个对象。
这个现象在方法调用中也很常见,将一个对象传递给方法时,也会产生“别名问题”,如下面的一段代码:
class Letter{
char c ;
}
public class PassObject{
static void f(Letter y){
y.c = 'z' ;
}
public void static void main(String[] args){
Letter x = new Letter();
x.c = 'a' ;
System.out.println(x.c) ;
f(x);
System.out.println(x.c);
}
}
上面代码的输出结果,第一次是a ,第二次是z,方法f()似乎要在它的作用域内复制其参数Letter y的一个副本,但实际上只是传递了一个引用。