class returntest
{
public static void main(String...args)
{
int a;
System.out.println(a); //Line 1
int b[] = new int[10];
System.out.println(b[1]); //Line 2
}
}
我在第1行遇到编译器错误(显然),说明该变量可能尚未初始化。
我知道默认情况下所有int数组元素都被初始化为0(所以第2行成功编译)但我的问题是为什么cant编译器将相同的逻辑(对于所有整数设置为0)应用于常规(非数组)int变量
是否有任何限制禁止编译器这样做?
答案 0 :(得分:4)
答案 1 :(得分:2)
来自here:-
局部变量略有不同;编译器永远不会分配 默认值为未初始化的局部变量。如果你不能 初始化声明它的局部变量,确保 在尝试使用它之前为其赋值。访问 未初始化的局部变量将导致编译时错误。
答案 2 :(得分:0)
当变量范围是本地的时,您必须初始化局部变量。
当您声明任何本地/块变量时,它们没有获得默认值。在访问它之前,它们必须分配一些值,否则编译器将抛出错误。
正如您在代码中看到的那样
int a; //Gives error because not assigned any value
为局部变量分配资源时,Java不会将值写入内存。出现错误的原因是因为Java确保在使用它之前给它一个值。 Sun意识到在C代码中诊断这可能是一个难题,因为你没有得到编译器的帮助,所以他们决定在编译时检查它。
请参阅此link
答案 3 :(得分:0)
这是一项语言设计决定。
对局部变量进行默认初始化可能会隐藏错误。使用局部变量意味着您要先设置它。 if中设置它的简单情况。