怎么会
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 等)?
从语言标准
否则,将创建一个指定长度的一维数组,并将数组的每个组件初始化为其默认值(第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。
是的,对于原始类型(布尔和字符除外),它将默认为零。如果是对象类型,它将默认为null
.
这个java教程可以帮助你。
注意:正如 woot4Moo 回答的那样,这仅适用于实例变量。如果是局部变量,那么它不会默认为任何变量。
是的,对于原始类型number arrays
,它初始化为0
, for boolean[]
,它初始化为false
, for char[]
,它初始化为NULL(ASCII value 0)
和 ,objects [] including String[]
它的初始化为null
。
这里涉及两个不同的类似问题。首先请注意,所有变量类型都有一个默认值,该值因类型而异。至少有两次使用这些默认值:1) 声明成员变量和 2) 使用new
运算符初始化数组。
请注意,如果您只是声明一个局部数组变量而不使用 初始化它,那么您会得到与声明一个简单变量new
时相同的错误。int
这是因为必须初始化所有局部变量。它们没有自动获得默认值。
另一方面,成员变量确实获得了默认值。同样,当您使用运算符创建数组对象时,数组new
的元素会被初始化为适当的默认值。
这取决于它的声明位置(在函数内的类副内)。如果它是类成员变量,它将被初始化为其默认值。数字类型为 0(浮点类型/双精度类型为 0.0),字符串为 null,布尔为 false,对象为 null。如果它在函数内部声明,则在int alone
. 就数组而言,它将始终初始化其中包含的值。