Java 中的缺省初始化
2022-09-04 05:16:16
我对Java中的变量初始化感到困惑。据我所知,类变量默认初始化,而局部变量默认不初始化。但是,如果我使用new关键字在方法中创建一个数组,则默认情况下它确实会被初始化。所有物体都是如此吗?使用 new 关键字是否会初始化对象,而不管它是类变量还是局部变量?
我对Java中的变量初始化感到困惑。据我所知,类变量默认初始化,而局部变量默认不初始化。但是,如果我使用new关键字在方法中创建一个数组,则默认情况下它确实会被初始化。所有物体都是如此吗?使用 new 关键字是否会初始化对象,而不管它是类变量还是局部变量?
来自 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
经过进一步调查,仅当基元是成员变量时,它们才会始终初始化为默认值,如果局部变量未初始化,则将引发编译错误。
如果创建一个基元数组,则默认情况下,它们都将被初始化(对于本地数组和成员数组都是如此),这是一个实例化每个对象的数组。