这个问题只是好奇心:我想知道一些人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,但由于某种原因,(完全逻辑和明显的)结果对我来说似乎很奇怪我应该已经考虑过了,抱歉你的时间!
它的计算方法是
步骤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)