Java中未赋值的对象实例变量是否会被分配内存空间?
解答
只要通过new关键字创建类实例,就算没有手动给实例属性赋值,这些实例变量也会占用内存。
具体规则说明
- Java类加载阶段就已经确定了类的结构,JVM会预先计算出每个该类实例需要占用的内存总大小,内存计算包含所有实例字段的占用空间,和后续是否给字段赋值没有关系。
- 执行
new创建实例时,JVM会直接在堆内存中分配好预先计算的全部内存空间,同时自动为所有实例变量填充对应类型的默认值,不存在「无值就不分配内存」的逻辑:- 示例中
int age属于基本数据类型,默认值为0,固定占用4字节内存 - 示例中
String name属于引用数据类型,默认值为null,引用本身的内存占用由JVM配置决定:64位JVM默认开启指针压缩时占4字节,关闭指针压缩时占8字节
- 示例中
- 你给出的示例代码执行
Employee emp = new Employee();之后,age和name两个字段的内存已经完成分配,哪怕没有手动赋值,对应的内存空间也已经被占用。
内容的提问来源于stack exchange,提问作者Aryaman
相关产品推荐
相关产品推荐

