【问题标题】:Operator precedence in Java not according to Java specificationJava中的运算符优先级不符合Java规范
【发布时间】:2014-08-30 11:34:18
【问题描述】:
     import java.util.*;
     class OperatorPrecedenceExp
     {
        public static void main(String[] args)
         {

          int e=10;
          sum=++e+e--;//e-- should b evaluated first
          System.out.println("sum="+sum);
         } 
     }

上面的代码打印sum=22。但是根据Java规范e--应该在++e之前被评估。所以结果应该是sum=20 而不是sum=22

【问题讨论】:

  • "根据java规范e--应该在++e之前评估" =>你有参考吗?表达式通常从左到右计算...
  • 在 Java 的所有问题中,这似乎是一个微不足道的问题
  • 正如@assylias 指出的那样,您的整个问题似乎是基于一个错误的前提。

标签: java operator-keyword operator-precedence


【解决方案1】:

当你说e--应该首先被评估

sum=++e+e--;//e-- should be evaluated first

你一定是错的。一方面e-- 直到下一个语句(即post-decrement 中的post)才会改变e。接下来,如果您将代码更改为,

int sum = ++e + --e;
System.out.printf("sum=%d%n", sum);

您将看到第一个 e 是预先递增的,然后添加到预先递减的 e(按此顺序),因为总和是

21

您的预期结果(20)可以通过

获得
int e = 11;
int sum = --e + e++;
System.out.printf("sum=%d%n", sum);

int e = 9;
int sum = ++e + e--;
System.out.printf("sum=%d%n", sum);

希望对你有帮助。

编辑

根据您的Java Tutorials link

除了赋值运算符之外的所有二元运算符都是从左到右计算的;赋值运算符从右到左求值。

你不能只浏览表格。

【讨论】:

  • ,@assylias ,@Oli Charlesworth 点击这个link你没有得到我的问题..根据Java规范运算符优先级,后缀应该在前缀运算符之前评估,因此“e--”应该在“e++”之前进行评估...请大家在评论之前查看链接..
  • @RanjitSran 已编辑以解决您的链接,Java 教程不是 JLS
猜你喜欢
  • 2012-12-13
  • 2011-12-28
  • 2021-10-25
  • 1970-01-01
  • 2014-08-02
  • 2015-08-29
  • 2011-09-16
  • 1970-01-01
相关资源
最近更新 更多