Java 中的缺省初始化

2022-09-04 05:16:16

我对Java中的变量初始化感到困惑。据我所知,类变量默认初始化,而局部变量默认不初始化。但是,如果我使用new关键字在方法中创建一个数组,则默认情况下它确实会被初始化。所有物体都是如此吗?使用 new 关键字是否会初始化对象,而不管它是类变量还是局部变量?


答案 1

来自 Java 语言规范

每个类变量、实例变量或数组组件在创建时都使用默认值进行初始化 (§15.9, §15.10):

  • 对于 byte 类型,默认值为零,即 (byte)0 的值。

  • 对于 short 类型,默认值为零,即(short)0 的值。

  • 对于 int 类型,默认值为零,即 0。

  • 对于 long 类型,默认值为零,即 0L。

  • 对于 float 类型,默认值为正零,即 0.0f。

  • 对于 double 类型,默认值为正零,即 0.0d。

  • 对于 char 类型,默认值为空字符,即“\u0000”。

  • 对于布尔类型,默认值为 false。

  • 对于所有引用类型 (§4.3),默认值为 null


答案 2

经过进一步调查,仅当基元是成员变量时,它们才会始终初始化为默认值,如果局部变量未初始化,则将引发编译错误。

如果创建一个基元数组,则默认情况下,它们都将被初始化(对于本地数组和成员数组都是如此),这是一个实例化每个对象的数组。