java对象赋值的“别名”问题

来源:互联网 发布:json图片解析 编辑:程序博客网 时间:2024/05/18 00:33

在对一个对象进行操作时,我们操作的实际是对对象的引用。所以倘若是“将一个对象赋值给另一个对象”,实际是将引用从一个地方复制到了另一个地方。这意味着,假如对对象使用 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的一个副本,但实际上只是传递了一个引用。