关于静态变量的内存分配问题

(1)首先static 称为类变量,它属于这个类,而不属于这个类的实例对象(但是可以通过实例对象去访问)当类连接的时候就为其分配空间并初始化默认值,空间分配在堆中。 
(2)Integer是int的包装类型,其中采用了缓存机制,在缓存中-128~127这些数是在堆中本来就存在的,所以Integer a = new Integer(1);  Integer b = new Integer(1); a与b其实是一个对象。如果你把数字改为128的话那就是两个对象了
(2)Map是一个接口, HashMap是map的一个实现类而已,在一个可变大小的容器,内存空间分配在堆中,map中存放的数据其实不是String的值,而是存放的String的引用(你可以理解为是String字符串的地址),以为String的创建是非常消耗资源的,所以在JVM中不希望你去反复的创建字符串对象,而是它维持了一个字符串池(在常量区),当你以String s=“abc”创建字符串的时候它会先去池中找,如果找到返回“abc”的引用,如果找不到那么才会去创建对象。 当你以String s = new(“abc”)的形式创建字符串时,其实是创建了两个对象,首先在堆中分配空间,其次把这个对象扔到字符串池中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文子阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值