java - 使用 boolean 值而不是变量初始化的 For 循环

标签 java variables for-loop boolean

我有这个代码片段:

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 中有详细说明.


让我们手动浏览一下:

  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
  2. 第二次迭代:
    • 条件 test('2') && (x <= 2)执行
      • 2打印和 counter设置为 5
      • 条件返回true
    • x++ : x设置为 3
    • test(4)称为
      • 4打印和 counter设置为 6
    • 增量test('3')称为
      • 3打印和 counter设置为 7
  3. 第三次迭代:
    • 条件 test('2') && (x <= 2)执行
      • 2打印和 counter设置为 8
      • 条件返回false , 自 x现在是 3

关于java - 使用 boolean 值而不是变量初始化的 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20911990/

相关文章:

java - 如何使用 JAVA 将字符串回显到 SSH

java - Kotlin - 等同于对象的 SomeClass.class?

javascript - 是否可以将 Sass 变量传递给 Laravel/Blade/JS?

JavaScript for 循环

C# While 循环与 For 循环?

java - 错误 : Client does not support authentication protocol requested by server; consider upgrading MySQL client

java - Java 接口(interface)应该只包含 getter 吗?

lisp - Clojure 变量和循环

objective-c - 我如何从 object_getIvar(self, myIntVar) 获取 int 值,因为它返回一个指针

javascript - 在 if 语句中检索用于比较的值时出现问题