【发布时间】:2012-10-31 20:44:26
【问题描述】:
怎么会
int alone;
System.out.println(alone);
给出错误但是
int[] arr = new int[1];
System.out.println(arr[0]);
等于 0? 当你初始化一个空数组时,它是否会自动将其内容初始化为0(或null等)?
【问题讨论】:
标签: java arrays initialization declaration
怎么会
int alone;
System.out.println(alone);
给出错误但是
int[] arr = new int[1];
System.out.println(arr[0]);
等于 0? 当你初始化一个空数组时,它是否会自动将其内容初始化为0(或null等)?
【问题讨论】:
标签: java arrays initialization declaration
是的,对于原始类型(布尔和字符除外),它将默认为零。如果是对象类型,则默认为null。
这个java tutorial 可以帮助你。
注意:正如 woot4Moo 回答的那样,这仅适用于实例变量。如果是局部变量,那么它不会默认为任何。
【讨论】:
new时会发生这种初始化。我认为new 没有任何方法可以区分实例变量和局部变量。
是的,对于基本类型number arrays,它初始化为0,对于boolean[],它初始化为false,对于char[],它初始化为NULL(ASCII value 0),对于objects [] including String[],它初始化为null.
【讨论】:
0 上的数字不正确,有浮点数和双精度数得到 0.0
0 的意思是 0.0,就好像你说 float f = 0;并打印 f,它将打印 0.0.
这里涉及两个不同的类似问题。首先请注意,所有变量类型都有一个默认值,该值因类型而异。至少有两次使用这些默认值:1) 声明成员变量和 2) 使用 new 运算符初始化数组。
请注意,如果您只是声明一个局部数组变量而不使用new 对其进行初始化,那么您会得到与声明一个简单的int 变量时相同的错误。这是因为必须初始化所有局部变量。它们没有自动获得默认值。
另一方面,成员变量确实有一个默认值。同样,当您使用new 运算符创建数组对象时,数组的元素会被初始化为适当的默认值。
【讨论】:
这取决于它的声明位置(在函数内部的类中)。如果它是类成员变量,它将被初始化为其默认值。数字类型为 0(浮点类型/双精度类型为 0.0),字符串为 null,布尔为 false,对象为 null。如果它在函数内部声明,则在 int alone 的情况下它将保持未初始化状态。就数组而言,它将始终初始化其中包含的值。
【讨论】:
new 显式初始化数组本身之后,OP 会询问数组的 元素。这与成员变量在声明时获取默认值不同。
int alone... 给出错误但数组没有。对未来的读者和 OP 进行区分是有价值的。此外,该问题没有解释这两个声明存在于何处,因此它们必须是函数的一部分。