【发布时间】:2018-05-22 03:00:00
【问题描述】:
为什么当一个“整数”数组作为局部变量时,它们默认为零?
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
}
【问题讨论】:
-
因为在 Java 规范中它的数组被初始化为零。局部变量不是(字段是)。
-
对。基本上是因为“这就是它的工作原理。”稍微详细一点:因为 Java 规范是这样说的。局部变量总是未初始化,使用
new创建的数组总是初始化。 Java 在这方面是 100% 一致的。 -
将数组值视为数组对象上的成员变量,它始终具有默认值。
-
简短的回答是
new关键字默认初始化所有用它创建的对象。默认情况下,“堆栈”分配的对象不会初始化,因为编译器可以在编译时检查是否存在在初始化之前使用堆栈变量的危险,对于动态分配内存的变量,情况并非如此。
标签: java arrays int local-variables