未初始化的原始实例变量是否使用内存?
问题内容:
在Java中,声明类级别的实例变量而不初始化它会消耗内存吗?
例如:int i;
如果不使用初始化内存,是否使用任何内存i = 5;
?
细节:
我有一个巨大的超类,许多不同的子类(不足以拥有自己的超类)扩展了。某些子类不会使用超类声明的每个原语。我可以简单地将这些原语保留为未初始化状态,而仅在必要的子类中对其进行初始化以节省内存吗?
问题答案:
类中定义的所有成员都具有默认值,即使您没有显式初始化它们也是如此,因此它们确实会使用内存。
例如,每个int
默认情况下都将初始化为0
,并且将占用4
字节。
对于班级成员:
int i;
是相同的 :
int i = 0;
这就是JLS关于实例变量的说法:
如果类T的字段a是实例变量,则将创建一个新的实例变量a,并将其初始化为 默认值
(第4.12.5节),作为类T的每个新创建对象或包含以下内容的任何类的一部分T的子类(第8.1.4节)。当完成对对象变量的任何必要的确定(第12.6节)之后,如果不再引用该实例变量作为字段的对象,则该实例变量实际上不再存在。