1

怎么会

int alone;
System.out.println(alone);

给出错误但

 int[] arr = new int[1];
 System.out.println(arr[0]);

等于0?当你初始化一个空数组时,它是否会自动将其内容初始化为 0(或 null 等)?

4

5 回答 5

6

语言标准

否则,将创建一个指定长度的一维数组,并将数组的每个组件初始化为其默认值(第4.12.5节)。

默认值为:

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

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

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

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

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

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

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

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

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

于 2012-10-31T21:04:38.667 回答
4

是的,对于原始类型(布尔和字符除外),它将默认为零。如果是对象类型,它将默认为null.

这个java教程可以帮助你。

注意:正如 woot4Moo 回答的那样,这仅适用于实例变量。如果是局部变量,那么它不会默认为任何变量。

于 2012-10-31T20:45:19.973 回答
2

是的,对于原始类型number arrays,它初始化为0, for boolean[],它初始化为false, for char[],它初始化为NULL(ASCII value 0)和 ,objects [] including String[]它的初始化为null

于 2012-10-31T20:45:46.173 回答
2

这里涉及两个不同的类似问题。首先请注意,所有变量类型都有一个默认值,该值因类型而异。至少有两次使用这些默认值:1) 声明成员变量和 2) 使用new运算符初始化数组。

请注意,如果您只是声明一个局部数组变量而不使用 初始化它,那么您会得到与声明一个简单变量new时相同的错误。int这是因为必须初始化所有局部变量。它们没有自动获得默认值。

另一方面,成员变量确实获得了默认值。同样,当您使用运算符创建数组对象时,数组new的元素会被初始化为适当的默认值。

于 2012-10-31T20:59:22.633 回答
1

这取决于它的声明位置(在函数内的类副内)。如果它是类成员变量,它将被初始化为其默认值。数字类型为 0(浮点类型/双精度类型为 0.0),字符串为 null,布尔为 false,对象为 null。如果它在函数内部声明,则在int alone. 就数组而言,它将始终初始化其中包含的值。

于 2012-10-31T20:46:47.790 回答