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

Ton*_*tto 3 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);
Run Code Online (Sandbox Code Playgroud)

为什么row编译w/o初始化在顶部,但Java认为column"可能没有初始化."?

Cro*_*zin 5

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