int数据类型初始化:数组与常规

时间:2013-08-31 07:11:38

标签: java arrays

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变量

是否有任何限制禁止编译器这样做?

4 个答案:

答案 0 :(得分:4)

语句块中定义的局部变量必须在使用前初始化。

但成员变量,直接在类主体中定义的成员变量,在创建对象时会自动初始化为0.

有用的帖子here

答案 1 :(得分:2)

来自here:-

  

局部变量略有不同;编译器永远不会分配   默认值为未初始化的局部变量。如果你不能   初始化声明它的局部变量,确保   在尝试使用它之前为其赋值。访问   未初始化的局部变量将导致编译时错误。

答案 2 :(得分:0)

当变量范围是本地的时,您必须初始化局部变量。

当您声明任何本地/块变量时,它们没有获得默认值。在访问它之前,它们必须分配一些值,否则编译器将抛出错误。

正如您在代码中看到的那样

int a; //Gives error because not assigned any value
  

为局部变量分配资源时,Java不会将值写入内存。出现错误的原因是因为Java确保在使用它之前给它一个值。 Sun意识到在C代码中诊断这可能是一个难题,因为你没有得到编译器的帮助,所以他们决定在编译时检查它。

请参阅此link

答案 3 :(得分:0)

这是一项语言设计决定。

对局部变量进行默认初始化可能会隐藏错误。使用局部变量意味着您要先设置它。 if中设置它的简单情况。