后递增,前递增。爪哇

时间:2019-03-15 07:55:17

标签: java increment post-increment

我了解此操作之间的区别(后递增,前递增)。 但是问题:我有一个表达:

long y = x * 4 - x++;

1). x++ => return 4 (save x = 5)
2). final expression: 5 * 4 - 4 = 16

具有最高优先级的一元运算符,而不是“ *”和最后一个“-”。我认为它将是:

12

但是当我在IDE中进行编译时,答案是{{1}}!有什么问题,我在哪里做了。错误?

5 个答案:

答案 0 :(得分:3)

已编辑

以下是计算表达式的步骤:

  1. 求所有具有从左到右递增/递减的表达式
  2. 将所有变量替换为其真实值
  3. 使用PEMDAS规则评估表达式

示例:

int x = 4;   
int y = ++x * 5 / x-- + --x;  
  • 首先,我们需要在评估表达式之前用x的所有值替换(从左到右替换)
    ++x->由于这是后期递增,我们将在替换前首先递增x,因此x将为5
    5 * 5 / x-- + --x->这将是新的等式
    现在我们将x中的x--替换为
    x--->由于它是后减量x,因此这里将替换为5,并在替换减量x之后,因此x将为4
    5 * 5 / 5 + --x->这将是新的等式
    现在我们将x中的--x替换为
    --x->由于它是预减量,因此我们首先将x减量代替,因此x将为3
    5 * 5 / 5 + 3 //这将是新的方程式

  • 由于方程式中没有变量,我们现在将使用PEMDAS评估表达式
    25 / 5 + 3 5 + 3
    8
    因此结果将是8

答案 1 :(得分:2)

long y = 4 * 4 - 4;

x将在分配后递增

每次x都被x ++“调用”时,x之后会递增 例如

    int x = 1;
    System.out.println(x++ + x++ * x++ + x++);
    // 1 + 2 * 3 + 4

答案 2 :(得分:1)

x的计算结果为4,x ++的计算结果也为4,然后递增为5。 因此本质上是4 * 4-4,这得到了预期的12。

答案 3 :(得分:1)

乘法是单独解决的,所以x == 4。增量随后发生,因此实际上是4 * 4 - 4 == 12,并且在此操作x == 5之后。

答案 4 :(得分:1)

减法的左侧总是在右侧之前计算,因为减法是左关联的,即5-2-1是(5-2)-1,而不是5-(2-1)。

这就是为什么乘法发生在增量之前。关联性决定首先发生什么,而不是优先发生。