我在尝试文件 I/O 时遇到了这个问题。该方法编译:
public static int testMethod1() {
try {
while (true);
} catch (Exception e) {
return 0;
}
}
虽然这两个没有:
public static int testMethod2() {
try {
while (true) { break; }
} catch (Exception e) {
return 0;
}
}
public static int testMethod3() {
try {
while (true) {
if (false) {
break;
}
}
} catch (Exception e) {
return 0;
}
}
我无法理解这一点。第一种方法在逻辑上与第三种方法等效。编译器到底在做什么?
第一种方法在逻辑上等价于第三种
事实并非如此。 if(false) 确实有影响。编译器不会在编译时对此进行评估,因此代码有可能到达
break
,在这种情况下,您不会返回任何内容(就像第二个片段中一样),这是实际的编译错误。