Java短路混乱

时间:2017-05-05 21:16:22

标签: java for-loop iteration conditional short-circuiting

此代码使用&&在for循环条件下。它迭代4次,得到答案“sum = 20”。我认为它会迭代5次,因为&&和条件为真,当右侧变为false时结束循环。

基本上我的问题是为什么它迭代4次而不是5次,使得“sum = 30”?感谢

   `int[] lst = {1,2,3,4,5,4,3,2,1};
    int sum = 0;
    for (int frnt = 0, rear = lst.length - 1;
            frnt < 5 && rear >= 5; frnt++, rear--){
        sum = sum + lst[frnt] + lst[rear];
        System.out.println("frnt: " + frnt);
        System.out.println("rear: " + rear);
        System.out.println();
    }
    System.out.print(sum);`

1 个答案:

答案 0 :(得分:0)

只有在已知整个表达式的值时才会发生短路。

对于Logical AND运算符(&amp;&amp;),如果左侧已经为假,则右侧评估的内容无关紧要,因为整个表达式已经为假。如果左侧为真,则右侧的值确定表达式的值。由于在评估之前不知道,因此必须对其进行评估。

对于逻辑OR运算符(||),反之亦然。如果表达式的左侧为真,那么右侧是什么并不重要,表达式为真,因此不评估右侧。如果左侧为假,则表达式的值取决于右侧,因此必须对其进行评估。