JAVA中的别名现象

2019-01-29  本文已影响0人  苏酥Su

问题的提出:
    在java中,对基本数据类型的赋值时,是将数据从一个地方复制到另外一个地方,当a=b时,将b的内容复制给a,若修改a时,b并不会受到这种修改的影响。

    在对对象进行赋值时,当我们对一个对象进行操作时,实际上是对该对象进行引用,倘若将一个对象赋值给另一个对象,实际上是将引用复制到另外一个地方。

图示

代码演示

class Tank{

    float level;

}

public class Assignment {

    public static void main(String[] args) {

        Tank t1=new Tank();

        Tank t2=new Tank();

        t1.level=0.9f;

        t2.level=10.05f;

        System.out.print("t1.level:"+t1.level+",t2.level:"+t2.level);

        t1=t2;

        System.out.print("t1.level:"+t1.level+",t2.level:"+t2.level);

        t1.level=0.7f;

        System.out.print("t1.level:"+t1.level+",t2.level:"+t2.level);

    }

}


结果输出:

t1.level:0.9,t2.level:10.05

t1.level:10.05,t2.level:10.05

t1.level:0.7,t2.level:0.7


为了避免别名情况出现,一般不对对象进行赋值,可使用t1.level=t2.level进行赋值,这样可以使得对象相互独立。


将一个对象传递给方法时,也会产生别名问题,代码示例

class Letter{

    char c;

}

public class PassObject{

    static void f(Letter y) {

        y.c='z';

    }

    public static void main(String[] args){

        Letter x=new Letter();

        x.c='a';

        System.out.println("x.c="+x.c);

        f(x);

        System.out.println("x.c="+x.c);

    }

}

结果演示:

x.c=a

x.c=z

上一篇 下一篇

猜你喜欢

热点阅读