繁体   English   中英

如果在删除的for语句中使用StatementExpressionList,ForInit的值是什么时候?

[英]When are the values of the ForInit if a StatementExpressionList is used in a for statement discared?

一个简单的陈述是:

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


 ForInit:
 StatmentExpressionList
 LocalVariableDecleration

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

从左到右计算序列中的每个表达式,如果任何表达式突然完成,则for语句突然完成,并且序列的评估从它完成的位置结束。 从左到右评估的任何表达式的值都被丢弃。

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

第一个参数的示例

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

一个变体是:

int a = getA(); //returns 0
for (int i = 10 / a; i < 5; i++) { //Ooops
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM