突然发现了一个神奇的事情:(a++) + (++a) + (++a)在Java和C++中的结果不一样?
在java中
public class Test {
public static void main(String[] args) {
int a = 0;
int b = (a++) + (++a) + (++a);
System.out.println(b);
}
}
输出结果:
在C++中
#include <iostream>
using namespace std;
int main() {
int a = 0;
int b = (a++) + (++a) + (++a);
cout << b << endl;
system("pause");
return 0;
}
结果:
有没有感觉很惊讶,我一直以为他们是一样的
既然这样我们只能查看它们的底层代码了
C++中的反编译代码
先对a进行了两次加1操作,然后a+a+a的值赋给b,最后a加1。
Java中的class文件
这个代码有问题???
仔细分析后发现执行流程是这样的:
表达式 | 结果 |
---|---|
a=0+1; | 1 |
++a; | 2 |
var=0+2; | 2 |
++a | 3 |
b=2+3; | 5 |