5
public class AndOperator {

    public static void main(String[] arg) {
        int value = 8;
        int count = 10;
        int limit = 11;

        if (++value % 2 == 0 && ++count < limit) {
            System.out.println("here");
            System.out.println(value);
            System.out.println(count);
        } else{
            System.out.println("there");
            System.out.println(value);
            System.out.println(count);
        }
    }
}

我得到的输出为

there
9
10

解释一下 count 是 10....?

4

4 回答 4

15

&&短路算子。如果第一个表达式的计算结果为真,它只会计算第二个表达式。

由于++value % 2 == 0是假的,因此它不会评估第二个表达式,因此不会递增count

于 2013-09-03T19:14:34.137 回答
4

++value= 9 so ++value % 2 == 0is falseso++count < limit不评估。

这称为短路评估。请参阅维基百科页面:http ://en.wikipedia.org/wiki/Short-circuit_evaluation

于 2013-09-03T19:16:18.527 回答
3

由于您使用的是&&(逻辑与)运算符。

仅当第一个条件被评估为真时才对第二个条件进行逻辑和评估

在您的代码中,第一个条件++value % 2 == 0被评估为false,因此++count < limit不会评估第二个条件。
如果你想执行++count < limit也使用&.
更多信息阅读& 和 && 之间的区别

于 2013-09-03T19:15:07.630 回答
2

因为 ++value % 2 == 0 是假的,所以它不会返回第一条语句。++value % 2 为 false 的原因是因为在计算 mod 运算符之前 value 增加了 1。所以 ++value % 2 是 9 % 2 != 0。

于 2013-09-03T19:17:19.460 回答