Java中的引用数据类型赋值问题

引用数据类型的几个问题
  • 数据类型除了基本数据类型就是引用数据类型,两者的本质区别就是一个是保存的真正的值,而另一个是保存的地址,在JVM解析引用数据类型变量的时候,会根据变量保存的地址进一步解析到其保存的值。

  • 为引用数据类型赋值就是修改该引用变量的指向,那么在Java中,引用数据类型都存储在堆内存中。

User u = new User(1);
u = new User(2);//重新修改u的指向,第一次new的那个user依然在堆内存中,但是此时没有指向了,会被JVM回收。
  • 引用数据类型大小的计算,确定一个变量为引用数据类型以后,如何确定所占用的字节数,这就涉及到了对象大小的计算,在Java中,int 4个字节,char 1个 字节 byte 1个字节 short 2个字节 long 8个字节,而一个引用数据类型在64位操作系统下往往占8个字节。
class User{
	private int id;
	private long age;
	private User user;
}

如下的一个对象,字节占用数就是 4 + 8 + 8 = 20,Java中如果不足8的倍数会补齐,也就是最后会占用24个字节。

  • 一个变量赋值给其他变量后对这个变量重新赋值不会改变原来的值。
  Person top = new Person();

        Person p1 = new Person();
        p1.setName("p1");
        Person p2 = new Person();

        p2.setName("p2");
        Person p3 = new Person();
        p3.setName("p3");
        top = p2;
        p2.setGoodFriend(p1);
        p3.setGoodFriend(top);
        
        System.out.println(p3);
        System.out.println(top);
        
        top = p3;
        System.out.println(top);

执行 p3.setGoodFriend(top);时由于top就是一个引用数据类型,所以将top赋值给p3.goodFriend是,实际上只是将top所保存的内存地址赋值给了p3.goodFriend,那么此时p3.goodFriend 与 top 与 p2指向的都是同一块内存地址。那么此时将p3赋值给top,那一样的道理,只是将p3的地址赋值给了top,top这个引用此时保存的是p3的地址。在top赋值给p3.goodFriend时还是保存的p2的地址,此时只是让top重新保存p3的地址,也就是一个变量的赋值只影响当前保存的值是什么,不会影响已经赋值过的,已经赋值过的依然会保存在堆内存中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值