1

一个简单的 for 语句是:

 for(ForInit/*Optional*/; EXPRESSION/*Optional*/; ForUpdate/*Optional*/) {
 }


 ForInit:
 StatmentExpressionList
 LocalVariableDecleration

 StatmentExpressionList
 e.g 
    int i = 0; a = 10, z = 2;

序列中的每个表达式都是从左到右计算的,如果任何表达式突然完成,for 语句就会突然完成,并且序列的计算从它完成的地方结束。从左到右计算的任何表达式的值都被丢弃。

现在是什么导致表达式突然完成?在评估序列中每个表达式的哪个阶段,该表达式的值被丢弃,如果该表达式的值被丢弃,那么 for 循环的其余部分将如何执行?

4

2 回答 2

2

第一个参数的示例

String a = null;
for (int i = a.length(); i < 5; i++) 

对于第二个参数

String a = null;
for (int i = 1; i < a.length(); i++)

第三个(你能猜到吗?)

String a = null;
for (int i = 1; i < 5; a.append(" "));

当然,循环的其余部分不会执行。

更新:我将对“废弃值”(现在无法检查)的引用解释为:

int i = 13;
try {
  String a = null;
  for (int i = 1; i < a.length(); i++)
  ...
} catch (Exception e) {
}

// Here i = 13
于 2012-07-25T21:39:15.200 回答
1

一个变体是:

int a = getA(); //returns 0
for (int i = 10 / a; i < 5; i++) { //Ooops
}
于 2012-07-25T21:43:14.167 回答