我刚刚遇到一段我感兴趣的代码(因为我在编程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帮助我进一步了解所提供的答案。
答案 0 :(得分:11)
简而言之,括号仅适用于特定的术语。
表达式y + (y+=1) % 4 + (x-=2) / 3;
可以重写为t1 + t2 + t3
,t1
代表y
,t2
代表(y+=1) % 4
,{{1} } t3
。
Java 总是从左到右对此进行评估,因为二元运算符 (x-=2) / 3
的关联性是从左到右。因此,+
是第一个要评估的术语,所以使用未增加的值t1
来完成。
答案 1 :(得分:8)