Java优先顺序

时间:2016-08-25 11:33:55

标签: java operator-precedence

我刚刚遇到一段我感兴趣的代码(因为我在编程2年之前从未将其视为一个问题)

int x = 5;
int y = 3;
int z = y + (y+=1) % 4 + (x-=2) / 3;
System.out.println(z);

输出为4.

我想知道为什么最左边的'y'首先被评估而不是'(y + = 1)'然后导致输出为5.(换句话说,为什么括号不强制顺序优先?)

我不确定要搜索什么,因为搜索'java优先顺序'会返回结果,这些结果最多只能显示y ++,++ y类问题的棘手例子,或只是优先级表的顺序。

我标记了Java,但我已经使用C#和javascript对其进行了测试,因此它可能是编程中的一般内容。

更新

我错误地认为优先顺序和评估顺序。

article帮助我进一步了解所提供的答案。

2 个答案:

答案 0 :(得分:11)

简而言之,括号仅适用于特定的术语

表达式y + (y+=1) % 4 + (x-=2) / 3;可以重写为t1 + t2 + t3t1代表yt2代表(y+=1) % 4,{{1} } t3

Java 总是从左到右对此进行评估,因为二元运算符 (x-=2) / 3关联性是从左到右。因此,+是第一个要评估的术语,所以使用未增加的t1来完成。

答案 1 :(得分:8)