【发布时间】:2013-12-28 10:58:46
【问题描述】:
&& 是一个短路运算符,从左到右求值,所以如果&& 运算符左侧的操作数被求值为假,求值应该不继续。但我希望++ 应该在&& 之前评估,因为它有higher precedence,并且(来自链接):
优先级较高的运算符在优先级较低的运算符之前进行评估。
那么,为什么count 不在这段代码的第三行增加呢?
int mask = 2;
int count = 0;
if( !(mask > 1) && ++count > 1) { mask += 100; }
System.out.println(mask + " " + count);
【问题讨论】:
-
有问题的句子可以修改为“具有较高优先级的运算符在具有较低优先级的运算符之前被评估如果它们被评估”。对于大多数运算符,计算顺序是“计算左操作数,计算右操作数,计算运算符”,但短路运算符是该规则的例外,因为它们可能导致其中一个操作数不被计算。
-
我关于 C# 中运算符优先级的系列文章可能会对您有所帮助。它们也适用于 Java。 ericlippert.com/tag/precedence
标签: java operators operator-precedence