Java算术表达式

时间:2019-09-13 13:15:43

标签: java operators

以下表达式的计算结果为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级括号来评估表达式。

2 个答案:

答案 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