x + = ++ x相当于x = 2x + 1:为什么?

Dry*_*ter 3 java

这个问题只是好奇心:我想知道一些人int x在行之后会有什么价值x += ++x 所以我试过了:

int x=10;
x+=++x;
System.out.println(x);
Run Code Online (Sandbox Code Playgroud)

它打印出来:

21
Run Code Online (Sandbox Code Playgroud)

在使用其他值进行一些测试后,它似乎等于x = 2x + 1.为什么?此行是否由编译器解释为字节操作?(顺便说一下,x + = x ++似乎等于x = 2x).

我不认为这是我在项目中使用的东西,但我很想知道为什么我得到这个结果.

谢谢你的任何解释或提示

编辑:首先,感谢您的回答

我知道+=操作员的工作方式,以及x++++x,但由于某种原因,(完全逻辑和明显的)结果对我来说似乎很奇怪我应该已经考虑过了,抱歉你的时间!

Ama*_*bra 9

它的计算方法是

  • 第1步:x = x + ++ x
  • 步骤2:变为x = 10 +(递增x)11

  • 第3步:最终结果存储在x即21中

这是证明:

我创建了一个MainClass如下:

public class MainClass{
public static void main(String...s){
int x = 10;
x += ++x;
}
}
Run Code Online (Sandbox Code Playgroud)

然后使用检查字节码 javap -c MainClass

  public static void main(java.lang.String...);
    Code:
       0: bipush        10     // push 10 onto stack
       2: istore_1             // store 10 in local variable 1
       3: iload_1              // load local variable 1 (now 10) back to stack
       4: iinc          1, 1   //increment local variable 1 by 1
       7: iload_1              // load local variable 1  (now 11) back to stack
       8: iadd                 // add top 2 variable on stack ( 10 and 11)
       9: istore_1             // store 21 to local variable 1
      10: return
}
Run Code Online (Sandbox Code Playgroud)