将额外代码添加到for循环的增量步骤

时间:2016-06-08 18:07:52

标签: java for-loop syntactic-sugar

喜欢这里编程的学生。我已经用java编程了4年,我觉得我对语言的工作方式有了很好的理解。然而,最近我偶然发现了让我感到惊讶的事情。在思考for循环时,我想"嘿,for循环的增量部分只是一个操作,我可以把其他东西放在那里吗?"最后在一些游戏后我决定试试这个:

for(int i = 0; i < 10; i++, System.out.print("foo"), System.out.print("bar")){}

这是一个完全为空的for循环,打印调用在循环的增量步骤内。令我惊讶的是,这个循环正常运行,每次循环时都会输出foo和bar。据我所知,你可以在那里放置尽可能多的方法。

这是什么?我搜索它并没有找到任何东西。我从未了解过这一点。应该避免吗?应该用吗?为什么它甚至有效?我无法找到任何显示此示例的资源。来自真正的程序员的任何意见都很好听!

3 个答案:

答案 0 :(得分:8)

这由Java Language Specification涵盖。提取物:

  

如果存在ForUpdate部分,则从左到右依次计算表达式;它们的价值(如果有的话)被丢弃。

是否应该使用?在我看来,没有。它使代码更难阅读,而且根本不是惯用语。

答案 1 :(得分:0)

for循环的语法只是写出几行代码的缩短方式。第一部分是初始化,第二部分是条件,第三部分是你想要的! (在大多数情况下是迭代器)。大多数人都没有把任何其他内容放在那里,因为它看起来很奇怪,或者他们只是想以特定的方式组织他们的代码。

答案 2 :(得分:0)

好吧,您可以将for循环视为一个while循环,为您提供一些“漂亮”的格式:例如循环

for(int i = 0; i < 10; i++){
    ...
}

与:

相同
int i = 0;
while(i < 10){
    ...
    i++;
}

请注意,for循环基本上只需要在增量部分中写入任何内容并将其放在循环的末尾,就在它跳回到开始之前。所以你放在那里的所有内容基本上都会添加到循环内部代码的末尾。你可以试试这个可能会更好地了解正在发生的事情:

for(int i = 0; i < 5; System.out.println("i before" +  i),i++,   System.out.println("i after" + i)){ 
    System.out.println("Inside");
}

打印出来:

Inside
i before0
i after1
Inside
...

正如旁注:我绝对不会那样使用它,因为它只会让代码更难理解,并且没有真正的好处。