13

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

4

3 回答 3

40

来自Java 语言规范

每个类变量、实例变量或数组组件在创建时都使用默认值进行初始化(第 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

于 2013-03-01T19:24:26.743 回答
5

经过进一步调查,基元只有在成员变量时才会初始化为默认值,局部变量如果没有初始化就会抛出编译错误。

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

于 2013-03-01T19:22:34.867 回答
4

所有对象都是这样吗?不管它是类变量还是局部变量,使用 new 关键字是否会初始化一个对象?

当您使用new关键字时。这意味着你已经初始化了你的对象。不管它是在方法级别还是实例级别声明的。

public void method(){
Object obj1;// not initialized
Object obj2 = new Object();//initialized
}
于 2013-03-01T19:22:44.493 回答