以下表达式的计算结果为14。
int a=4;
int b=6;
int c=1;
int ans= ++c + b % a - (c - b * c);
System.out.print(ans);
Run Code Online (Sandbox Code Playgroud)
这就是我的计算方式
1. (c - b * c) // since bracket has highest preference
ans : -5
2. ++c //since unary operator has next highest preference
ans : 2
3. b%a // % has higher preference than + and -
ans : 2
Run Code Online (Sandbox Code Playgroud)
因此,2 + 2-(-5)= 9
如您所见,我得到的值是9。不知道我的计算方式出了什么问题(很确定我最终会看起来很愚蠢)
编辑:我指的是以下链接的优先级和关联。 https://introcs.cs.princeton.edu/java/11precedence/
有人可以解释16级和13级括号之间的区别吗?我认为13级括号仅用于类型转换。这就是为什么我考虑使用16级括号来评估表达式。
评估顺序与优先级不同。Java 总是从左到右求值(在数组访问方面有一点警告)。
实际上,您正在评估以下表达式,因为发生的第一件事就是预递增c:
2 + 6 % 4 - (2 - 6 * 2)
Run Code Online (Sandbox Code Playgroud)
然后,优先级描述如何组合值。