我有这个代码片段:
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
在这里做什么?
最佳答案
“初始化”语句(在本例中为 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
-
- 条件
关于java - 使用 boolean 值而不是变量初始化的 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20911990/