为什么空阵列自动初始化内容?
int alone;
System.out.println(alone);
给出了错误,但
int[] arr = new int[1];
System.out.println(arr[0]);
等于0? 当您初始化一个空数组时,它是否会自动将其内容初始化为0(或null等)?
为什么空阵列自动初始化内容?
int alone;
System.out.println(alone);
给出了错误,但
int[] arr = new int[1];
System.out.println(arr[0]);
等于0? 当您初始化一个空数组时,它是否会自动将其内容初始化为0(或null等)?
是的,对于原始类型(布尔和字符除外),它将被默认为零。如果对象类型将默认为null
。
This java tutorial may help you。
注意:当woot4Moo回答时,这仅适用于实例变量。如果局部变量,那么它不会被默认为任何。
这取决于它在哪里被声明(在函数内部的一个类中)。如果它是一个类成员变量,它将被初始化为默认值。数字类型为0(float类型为0.0/double),字符串为null,布尔值为false,对象为null。如果在函数内声明它,它将在int alone
的情况下保持未初始化。就数组而言,它将始终初始化其中包含的值。
downvote porque? – Woot4Moo
请注意,在使用'new'显式初始化数组之后,OP询问数组的*元素*。这与成员变量在声明中获取默认值的问题不同。 –
我还在输入我的评论= p –
这里涉及到两个相似的问题。首先请注意,所有变量类型都有一个默认值,这取决于类型。至少有两次使用这些默认值:1)声明一个成员变量,2)用new
运算符初始化一个数组。
注意,如果你只是声明一个本地数组变量而不用new
进行初始化,那么当你声明一个简单的int
变量时,你会得到同样的错误。这是因为所有的局部变量都必须被初始化。他们没有得到一个自动默认值。
另一方面,成员变量确实得到一个默认值。同样,当您使用new
运算符创建数组对象时,数组的元素将被初始化为适当的默认值。
不正确,布尔值不初始化为零。 char也不初始化为零。 – Woot4Moo
@ Woot4Moo:同意更新。 – kosa
实例数组变量与本地数组变量没有区别,因为调用'new'时发生此初始化。我不认为'new'有任何区分实例变量和局部变量的方法。 –