在Java中,为什么某些变量最初需要初始化而其他变量只需要声明?

时间:2012-04-09 02:12:12

标签: java variables initialization declaration

我试图在更深层次上理解我是否缺少了解Java何时需要初始化变量与简单声明的东西。在下面的代码中,变量'row'不需要为编译和运行赋值,但是,变量'column'可以。

注意:这个程序没有任何用处 - 它被修剪掉只显示这个问题所必需的内容,以免浪费人们宝贵的时间。

以下是代码段:

int row;      //row doesn't need initialization
int column=0; //column does need initialization
for (row=0; row<2; row++){
    for (column=0; column<2; column++){
    }
}
System.out.print("Col:" + column + " row:" + row);

为什么row在顶部编译无初始化,但Java认为column“可能尚未初始化。”?

3 个答案:

答案 0 :(得分:5)

保证表达式row = 0(来自外部循环),因此row变量将在使用前始终初始化。当且仅当外循环至少迭代一次时,才会初始化column变量。换句话说,表达式column = 0(来自内部循环) 保证不会被评估。

答案 1 :(得分:4)

row中使用columnSystem.out.println变量之前,需要初始化它们。 row在外部循环中初始化,所以它很好,但是在内部循环中初始化了列,并且编译器不会假设它将会运行(即使它将在实践中)。

答案 2 :(得分:2)

Java编译器无法遵循您的代码。它看到column在外部for循环的主体内初始化,但无法确定该代码是否会运行。因此,在调用print之前,无法确定您的变量是否始终被初始化。

另一方面,它知道外部for循环的初始化语句无论如何都可以保证运行。因此,它可以保证row将被初始化。