JAVA别名现象

今天阅读java编程思想,发现一个很有意思的东西,以前没有注意到,特此记录一下,如果让两个对象同时绑定到相同的对象上,容易造成对象内的域婚乱,什么意思呢,看看代码你就知道了。

public class Tank {
  float level;
}
package liani;
public class Assingment {
   public static void main(String[] args) {
    Tank t1= new Tank();
    Tank t2= new Tank();
    t1.level = 9;
    t2.level = 47;
    System.out.println("1:t1.level: " +t1.level+", t2.level: "+t2.level);
    t1 = t2;
    System.out.println("2:t1.level: " +t1.level+", t2.level: "+t2.level);
    t1.level = 27;
    System.out.println("3:t1.level: " +t1.level+", t2.level: "+t2.level);
}
}

你猜,程序运行结果是什么?
**1:t1.level: 9.0, t2.level: 47.0
2:t1.level: 47.0, t2.level: 47.0
3:t1.level: 27.0, t2.level: 27.0**

和想象中的不一样吧,刚开始我以为3那里t1的值应该是27,t2的值还是47呢,但是由于我们做了t1 = t2;把t1也指向了t2所指像的对象,而之前t1指向的对象由于被覆盖,不在被引用,将会被GC清理掉,后来做了t1= t2操作,实际就是修改了对象内值,下面t1.level = 27,修改的时候,所以t2也会被同步掉。

避免别名现象方法是,在赋值的时候不要用对象之间的赋值,用t1.level = t2.levlel 就避免了。

个人理解,若有不到指出,欢迎指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值