在Java中,运算符优先级、递增和递减,为什么不执行第一个println语句?

Dil*_*iya -1 java

class Example{
    public static void main(String args[]){
        int x=99;
        if(x++==x){
            System.out.println("x++==x : "+x); //Why this code line is not run?
        }
        if(++x==x ){
            System.out.println("++x==x : "+x); 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么第一条语句没有println执行?

Era*_*ran 6

表达式的操作数从左到右进行计算。

在表达式 中x++ == x,首先x++计算。它增加x1但返回 的原始值x。于是x++返回99

然后x进行求值,返回100(因为它增加了x++)。

由于99不等于100,因此该条件的计算结果为false

如果将表达式更改为x==x++,您将得到true


ole*_*nik 5

i++和之间的区别++i非常简单。

  • i++- 意味着首先获取值,然后递增它以供进一步使用
  • ++i- 意味着首先递增值并使用递增后的值

跟随托运人x++ == x意味着以下内容:

  • 从左到右分析表达式
  • 获取x = 99作为左操作数并在表达式中使用它
  • 增量x,从而x == 100
  • 获取x = 100作为正确的操作数(注意它已经递增)
  • 99 != 100

跟随托运人++x == x意味着以下内容:

  • 从左到右分析表达式
  • 获取x = 99作为左操作数
  • 递增x并因此x == 100在表达式中使用它
  • 获取x = 100作为正确的操作数(注意它已经递增)
  • 100 == 100

你可以看到所有这些逻辑。例如,没有经验的开发人员无法知道这些细节。因此,最佳实践是避免表达式中出现此类增量。只需在单行中的表达式之前执行即可。在这种情况下,逻辑将是直接的,并且你遇到的问题也会少得多。