让我们比较这两种方法......
public void fooTestOk() {
boolean ret = true;
for (int i = 0; i < 10; i++) {
boolean r;
if (fooIf(i))
r = fooMethod(i);
else
r = fooMethod(i);
ret = ret && r;
}
System.out.println("ret "+ret);
}
Run Code Online (Sandbox Code Playgroud)
它给了我预期的输出(我已经提出了新的排名):
0
1
2
3
4
5
6
7
8
9
ret false
但这种方法
public void fooTestFail() {
boolean ret = true;
for (int i = 0; i < 10; i++) {
if (fooIf(i))
ret = ret && fooMethod(i);
else
ret = ret && fooMethod(i);
}
System.out.println("ret "+ret);
}
Run Code Online (Sandbox Code Playgroud)
只给我这个输出,循环必须打破!没有例外!
0
ret false
任何人都可以解释为什么在这种情况下循环终止没有任何错误?
这是我的fooIf和fooMethod功能:
public boolean fooIf(int i) {
return i % 2 == 0;
}
public boolean fooMethod(int i) {
System.out.println(i);
return i == 5;
}
Run Code Online (Sandbox Code Playgroud)
&&是短路的.这意味着如果在a && b,a评估false,b不再评估.所以,循环不会破坏.发生的事情是fooMethod没有被调用,因为在第一次迭代之后ret获取false.
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |