【发布时间】:2014-08-24 10:46:01
【问题描述】:
示例代码:
编译错误:
可能已经分配了最终的局部变量标志
final boolean flag;
while (flag = false) { // I am using = instead of == just to test it
System.out.println("inside loop");
}
编译错误:
无法访问的代码
final boolean flag = false;
while (flag) {
System.out.println("inside loop");
}
我知道:
- 局部变量必须在首次使用前进行初始化。
- 根据编码标准,最终局部变量必须在声明时进行初始化。
问题:
- 这些语句之间有什么区别?据我了解,两者都是一样的。
- 为什么第一个示例代码不涉及无法访问的代码。第二个编译错误我很清楚。
如果在 if 条件下工作正常
final boolean flag;
if (flag = false) { // no compilation error
System.out.println("inside if block");
}
如果我在while 循环中添加一个break 语句,以确保编译器可以在其生命周期内只初始化一个final 局部变量,那么如果工作正常。
final boolean flag;
while (flag = false) {
System.out.println("inside if block");
break;
}
【问题讨论】:
-
对于您的最后一种情况,它有效,因为尚未分配标志。如果你把第一行改成
final boolean flag = false就不行了 -
@Chip 是的,我知道,无法再次为
final变量赋值。 -
所以最后得出的结论是:我们不能在循环内分配最终变量。感谢大家宝贵的时间。
-
@Chip 如果我们添加
break语句,我们可以。 -
是的,我说谢谢大家。
标签: java if-statement while-loop final