3

抱歉,如果这是重复的,但我什至想不出一种方法来搜索它。我不确定要问这个问题的术语,所以我将解决我的问题。

从我的测试来看,似乎 if 语句将在尝试转到数组 [10] 之前退出。我总是这样吗?意思是,如果我的 if 语句中有一个 && 并且左侧为假,它会在测试第二个之前总是退出吗?就此而言,它会总是先测试左边吗?

public static void main(String[] args) {
        boolean [] array = new boolean [10];
        Arrays.fill(array, true);
        int i = 10;
        if(i < array.length && array[i]){
            System.out.println("WhoHoo!");
        }
}
4

4 回答 4

9

From the Java Tutorials on operators:

The && and || operators perform Conditional-AND and Conditional-OR operations on two boolean expressions. These operators exhibit "short-circuiting" behavior, which means that the second operand is evaluated only if needed.

于 2013-04-16T09:18:48.377 回答
2

是的。如果左边为假,它将终止条件。因为如果你把&&那么所有的条件都必须为真,如果任何一个条件变为假,那么就没有必要再进一步了。所以它在条件得到时终止false

于 2013-04-16T09:18:35.923 回答
1

如果我的 if 语句中有 && 并且左侧为假,它会在测试第二个之前总是退出吗?

是的。如果左侧为假,则无需检查右侧,因为当您有:

if(a && b) { ... }

如果,那么无论是什么!a,整个语句都被评估为b

如果a,那么它将继续评估下一个。

总而言之,请始终记住这一点

...仅在需要时才评估第二个操作数。

于 2013-04-16T09:16:01.000 回答
0

如果第一个条件评估为true,它只会评估第二个条件。

评估从左侧开始,当评估为错误时,不会发生进一步的评估。

于 2013-04-16T09:16:15.197 回答