【问题标题】:If post decrement have higher precedence than pre increment in JAVA then why does the following code output as 22.0 and not as 20.0 .?如果在 JAVA 中后递减的优先级高于前递增,那么为什么以下代码输出为 22.0 而不是 20.0 ?
【发布时间】:2020-11-01 09:38:05
【问题描述】:

根据优先规则,首先应评估quantity--,然后评估10,然后评估++quantity,评估结果为10,然后执行加法,结果应为20.0

    int quantity = 10;
    double total = ++quantity + quantity--;
    System.out.println("total is: - " + total);

【问题讨论】:

  • 这根本不正确,运算符是从左到右计算的。 pre-increment 将 10 变为 11,post decrement 直到下一行才生效。所以11 + 1122。然后(在下一行)quantity 是 10。

标签: java increment operator-keyword operator-precedence decrement


【解决方案1】:

优先规则告诉您如何解析表达式。具有更高优先级的后递减意味着++quantity + quantity--必须被解析为

((++quantity) + (quantity--))

而不是例如下面这甚至没有意义

((++quantity) + quantity)--

评估顺序不受影响。表达式仍然从左到右进行计算。即,+ 的左分支在右分支之前。这意味着必须在 quantity-- 之前评估 ++quantity

【讨论】:

  • 按照这个逻辑,当post和pre递增/递减具有相同的优先级时,它本质上会带来相同的解析结果。我说的对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
相关资源
最近更新 更多