我有这个代码片段:
private static int counter = 0;
public static void main(String[] args) {
int x = 1;
for (test('1'); test('2') && (x <= 2); test('3'))
{
x++;
test('4');
}
System.out.println(" Counter=" + counter);
}
static boolean test(char num)
{
System.out.print(" " + num);
counter++;
return true;
}
为什么for
循环在这里做?我认为for循环中的第一个语句必须是变量的初始化,并且这不会编译,但它会运行并输出输出:
1 2 4 3 2 4 3 2 Counter=8
boolean
在这做什么?
答案 0 :(得分:6)
“初始化”语句(本例中为test('1')
)可以是任何语句列表(参见下面的JLS链接);它不需要实际初始化。
条件test('2') && (x <= 2)
将在每次循环迭代之前按照惯例进行评估,直到它变为false。每次迭代后都会执行增量test('3')
。
详见JLS §14.14.1。
让我们手工完成它:
test(1)
致电
1
已打印,counter
设为1
test('2') && (x <= 2)
已执行
2
已打印,counter
设为2
true
x++
:x
设置为2
test(4)
致电
4
已打印,counter
设为3
test('3')
来电
3
已打印,counter
设为4
test('2') && (x <= 2)
已执行
2
已打印,counter
设为5
true
x++
:x
设置为3
test(4)
致电
4
已打印,counter
设为6
test('3')
来电
3
已打印,counter
设为7
test('2') && (x <= 2)
已执行
2
已打印,counter
设为8
false
,因为x
现在为3 答案 1 :(得分:0)
这是一个有效的for循环,所以它可以正常工作
它有(初始化,终止,增量)部分
这三个可以是几乎任何有效的表达(几乎)
1)终止需要布尔
2)初始化和增量可以是任何表达式列表
以下是for循环语法的非正式描述。
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html
有关更正式的说明,请查看JLS。