如果我写
private void check(){ if(true) return; String a = "test"; }
上面的代码工作正常,但如果我写
private void check(){ return; String a = "test"; }
Android Studio中的编译器/ gradle虽然它是相同的,但它不会让这个通过,并且它表示在示例2中返回后的代码无法访问.
我对此没有任何问题,但我很想知道为什么?
解决方法
这可以通过Java语言规范的
Unreachable Statements部分来解释.
有一些规则,有一个有趣的特殊情况.这是一个编译时错误:
while (false) { // this code is unreachable String something = ""; }
虽然这不是:
if (false) { // this code is considered as reachable String something = ""; }
给出的原因是允许某种条件编译,例如:
static final boolean DEBUG = false; ... if (DEBUG) { x=3; }
所以在你的情况下:
private void check(){ if(true) return; // NO compilation error // this is conditionnal code // and may be omitted by the compiler String a = "test"; }
因为特殊的if治疗不是错误,使用while而不是接受:
private void check(){ while(true) return; // "Unreachable statement" compilation error String a = "test"; }
这也是错误的:
private void check(){ if(true) return; else return; // "Unreachable statement" compilation error String a = "test"; }