JAVA中的别名现象

问题的提出:
    在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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 2,887评论 0 8
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,908评论 0 2
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    叶总韩阅读 5,165评论 0 41
  • 在最底层,Java中的数据是通过使用操作符来操作的。Java是建立在C++基础上的,所以C和C++程序员应该非常熟...
    Karma1026阅读 288评论 0 0
  • 2017年11月5日22点,窗外下雨了,作为一名西北的姑娘还是非常喜欢下雨的。十一月的天气里不冷也不热刚刚好,这样...
    ye小雨阅读 125评论 4 3