在Java中,为什么某些变量首先需要初始化,而其他变量只需要声明?
我试图在更深的层次上理解Java何时需要初始化变量而不是简单的声明。在下面的代码中,不需要为变量“row”赋值来编译和运行,但是变量“column”需要赋值 注意:这个程序没有任何用处——为了不浪费人们宝贵的时间,它被裁剪成只显示这个问题所需的内容 下面是代码片段:在Java中,为什么某些变量首先需要初始化,而其他变量只需要声明?,java,variables,initialization,declaration,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
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);
int行//行不需要初始化
int列=0//列确实需要初始化
对于(row=0;row表达式row=0
(来自外循环)保证被计算,因此row
变量在使用前总是被初始化。当且仅当外循环至少迭代一次时,列
变量才会被初始化。换句话说,expresion列=0
(来自内环)在系统.out.println
中使用行
和列
变量之前,它们需要初始化,行
在外部循环中初始化,因此可以,但列在内部循环中初始化,编译器不进行假设这将永远运行(即使它在实践中会运行)
另一方面,它知道无论发生什么情况,外部for
循环的初始化语句都保证运行。因此它可以保证行
将被初始化。这似乎是反向的。编译器可以按照您的代码进行操作,并且可以看到在某些条件下列
将不会被初始化。在这个特定的例子中,列
将始终被初始化。我想说的是编译器不知道这一点。我现在理解你的意思。正如Crozin在下面提到的,两个变量都需要初始化。你只是碰巧在第3行初始化行,但可能永远不会(根据编译器)如果在第2行没有初始化列,则初始化列。