我想了解更深的层次,如果我失去了一些东西,以了解当Java需要一个变量的初始化VS一个简单的声明。 在下面的代码中,变量“行”并不需要被分配一个值但编译和运行,变量“列”一样。
注意:此程序不执行任何使用 - 它被修整,只显示什么必要这个问题,以不浪费人民的宝贵时间。
下面的代码片段:
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
编译W / O顶部初始化,但Java会把column
“可能不会被初始化。”?
表达row = 0
(从外环)保证要被评估,因此row
变量总是会在使用前进行初始化。 的column
,当且仅当,外循环将重复至少一次变量将被初始化。 换句话说,expresion column = 0
(从内环) 不能保证进行评价。
前两者的row
和column
变量在使用System.out.println
,他们需要被初始化,。 row
在外环初始化,所以这是好的,但列在内环初始化,编译器不作任何假设,这将永远运行(尽管它在实践中)。
Java编译器不能按照你的代码。 它看到column
被外体内部初始化for
循环,但还没有被确认的代码将永远运行方式。 因此,它不能确定它之前在调用访问真实的变量总是会被初始化print
。
在另一方面,它知道外的初始化语句for
循环保证运行不管是什么。 因此,它可以保证row
将被初始化。
文章来源: In Java, why do certain variables need initialization at first and others only need declaration?