我对 Java 中的变量初始化感到困惑。据我了解,类变量默认初始化,而局部变量默认不初始化。但是,如果我使用 new 关键字在方法内创建一个数组,则默认情况下它会被初始化。所有对象都是这样吗?不管它是类变量还是局部变量,使用 new 关键字是否会初始化一个对象?
3 回答
每个类变量、实例变量或数组组件在创建时都使用默认值进行初始化(第 15.9 节、第 15.10 节):
对于 byte 类型,默认值为 0,即 (byte)0 的值。
对于short类型,默认值为0,即(short)0的值。
对于 int 类型,默认值为 0,即 0。
对于 long 类型,默认值为 0,即 0L。
For type float, the default value is positive zero, that is, 0.0f.
For type double, the default value is positive zero, that is, 0.0d.
For type char, the default value is the null character, that is, '\u0000'.
For type boolean, the default value is false.
For all reference types (§4.3), the default value is null
经过进一步调查,基元只有在成员变量时才会初始化为默认值,局部变量如果没有初始化就会抛出编译错误。
如果您创建一个基元数组,默认情况下它们都将被初始化(对于本地数组和成员数组都是如此),您将需要实例化一个对象数组。
所有对象都是这样吗?不管它是类变量还是局部变量,使用 new 关键字是否会初始化一个对象?
当您使用new
关键字时。这意味着你已经初始化了你的对象。不管它是在方法级别还是实例级别声明的。
public void method(){
Object obj1;// not initialized
Object obj2 = new Object();//initialized
}