Java int的局部变量数组默认为零
为什么将“int”数组作为局部变量时,它们默认为零Java int的局部变量数组默认为零,java,arrays,int,local-variables,Java,Arrays,Int,Local Variables,为什么将“int”数组作为局部变量时,它们默认为零 public static void main(String [] args) { int []arrayInts = new int[5]; for(int i: arrayInts) System.out.println(i); //Prints out zeros } 而如果将“int”变量声明为局部变量,则不
public static void main(String [] args) {
int []arrayInts = new int[5];
for(int i: arrayInts)
System.out.println(i);
//Prints out zeros
}
而如果将“int”变量声明为局部变量,则不会初始化该变量
public static void main(String [] args) {
int a;
System.out.println(a);
//Compilation error: The local variable a may not have been initialized
}
这两个例子不具有可比性 在第一种情况下,您正在主动地初始化数组。整数数组的值为0
在第二个示例中,您没有显式或隐式地初始化变量
a
,而是尝试使用它。Java会抱怨这个动作。因为在Java规范中,数组被初始化为零。局部变量不是(字段是)。右-o。基本上是因为“它就是这样工作的。”稍微详细一点:因为Java规范这么说。局部变量总是未初始化的,使用new
创建的数组总是初始化的。Java在这方面是100%一致的。将数组值视为数组对象上的成员变量,它总是有一个默认值。简单的回答是,new
关键字默认初始化使用它创建的所有对象。默认情况下,不会初始化“堆栈”分配的对象,因为编译器可以在编译时检查在初始化堆栈变量之前是否存在使用堆栈变量的危险,而动态分配内存的变量则不是这样。对。这些例子可能看起来与新来的人相当,但事实并非如此new
是一种特殊的函数,它可以执行普通局部变量无法执行的操作,如初始化数组。即使只是一个小小的关键字,也会有很大的不同。@markspace:您忽略了一个重要的东西:赋值运算符。您可以new
一整天都在应用程序中运行,而无需将其分配给变量。您可以声明变量,而无需为其赋值。但是,如果您试图使用一个没有被赋值的变量,您将有一个编译错误。