我对Java中的变量初始化感到困惑。据我所知,类变量获取默认初始化,而默认情况下不初始化局部变量。但是,如果我使用new关键字在方法内创建一个数组,它默认会初始化。所有对象都是如此吗?使用new关键字是否初始化对象,无论它是类变量还是局部变量?
答案 0 :(得分:30)
每个类变量,实例变量或数组组件在创建时都会使用默认值进行初始化(§15.9,§15.10):
对于type byte,默认值为零,即值 (字节)0
对于type short,默认值为零,即(short)0的值。
对于int类型,默认值为零,即0。
对于long类型,默认值为零,即0L。
对于float类型,默认值为正零,即0.0f。
对于double类型,默认值为正零,即0.0d。
对于char类型,默认值为空字符,即'\ u0000'。
对于类型boolean,默认值为false。
对于所有引用类型(第4.3节),默认值为null
答案 1 :(得分:5)
经过进一步调查后,只有当它们是成员变量时,原语才会初始化为默认值,如果未初始化,则局部变量将抛出编译错误。
如果创建一个基元数组,它们将默认初始化(对于本地和成员数组都是如此),您需要实例化每个基元的对象数组。
答案 2 :(得分:2)
所有对象都是如此吗?是否使用new关键字初始化 对象,无论它是类变量还是局部变量?
使用new
关键字时。这意味着您已初始化您的对象。如果在方法级别或实例级别声明它并不重要。
public void method(){
Object obj1;// not initialized
Object obj2 = new Object();//initialized
}