以下表达式的计算结果为14。
int a=4;
int b=6;
int c=1;
int ans= ++c + b % a - (c - b * c);
System.out.print(ans);
这就是我的计算方式
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
因此,2 + 2-(-5)= 9
如您所见,我得到的值是9。不确定我的计算方式有什么问题(很确定我最终会看起来很愚蠢)
编辑:我参考以下链接获得优先级和关联性。 https://introcs.cs.princeton.edu/java/11precedence/
有人可以解释16级和13级括号之间的区别吗?我认为13级括号仅用于类型转换。这就是为什么我考虑使用16级括号来评估表达式。
答案 0 :(得分:6)
评估顺序与优先顺序不同。 Java always evaluates left-to-right(在array accesses周围有一个小警告)。
有效地,您正在评估以下表达式,因为发生的第一件事是c
的预递增:
2 + 6 % 4 - (2 - 6 * 2)
然后,优先级描述如何组合值。
答案 1 :(得分:1)
在c上使用foo::impl
运算符时。因此,在foo::impl
上应用foo
之后,pre-increment
的值将为increment
。现在:
c
将被评估为c
因此,最终表达式将为2