未初始化的基元实例变量是否使用内存?

在 Java 中,声明类级实例变量而不对其进行初始化是否会花费内存?
例如:如果我不使用 ?int i;i = 5;

详:

我有一个巨大的超类,许多不同的(不够不同,没有自己的超级类)子类扩展。某些子类不使用超类声明的每个基元。我可以简单地将此类基元保留为未初始化,而仅在必要的子类中初始化它们以节省内存吗?


答案 1

类中定义的所有成员都具有默认值,即使您没有显式初始化它们,它们也会使用内存。

例如,默认情况下,每个都将初始化为 ,并将占用字节。int04

对于类成员:

int i;

与 相同:

int i = 0;

以下是JLS对实例变量的描述:

如果类 T 具有一个作为实例变量的字段 a,则会创建一个新的实例变量 a 并将其初始化为默认值 (§4.12.5),作为类 T 的每个新创建对象的一部分,或作为 T 的子类的任何类的一部分 (§8.1.4)。当实例变量作为字段的对象在完成对象的任何必要终结 (§12.6) 后不再被引用时,实例变量实际上不再存在。


答案 2

是的,尽管您没有为其分配任何值,但内存会分配。

int i;

这需要内存(分配)。无论您是否使用它。32 bit

某些子类不使用由超 Class 声明的每个基元。我可以简单地将此类基元保留为未初始化,而仅在必要的子类中初始化它们以节省内存吗?

同样,无论您在何处初始化,内存都会分配。

您唯一需要注意的是,只需找到未使用的基元并删除它们即可。

编辑:再添加一个点,与原语的引用不同,默认值是 ,它带有null

 4 bytes(32-bit) 
 8 bytes on (64-bit)