今天在上Java课讲自加自减的时候遇到一个问题,同样的代码用不同的语言实现效果却不一样,感到很奇怪,于是自己尝试了一下。
众所周知,大伙在学C++的时候都会遇到i++和++i的折磨,其实也挺好区分,前者是先赋值后+1,后者是先+1后赋值。
再来说一下在Java和C++中的区别吧,先看代码:
Java:
public class HelloWorld {
public static void main(String[] args) {
int x1=3,y1=5;
int x2=3,y2=5;
int r1,r2;
r1=x1+++x1*y1;
r2=++x2+x2*y2;
System.out.println("x1="+x1+"y1="+y1+"r1="+r1);
System.out.println("x2="+x2+"y1="+y2+"r1="+r2);
}
}
C++:
#include<iostream>
using namespace std;
int main() {
int x1 = 3, y1 = 5;
int x2 = 3, y2 = 5;
int r1, r2;
r1 = x1++ + x1 * y1;
r2 = ++x2 + x2 * y2;
cout << "x1=" << x1 << "y1=" << y1 << "r1=" << r1 << endl;
cout << "x2=" << x2 << "y2=" << y2 << "r2=" << r2 << endl;
}
可以看到,代码是一模一样的,但是结果却不太一样。通过结果我们可以看出:在Java的r1=x1+++x1*y1中是计算完x1++之后立马就将x1=3变为x1=4再进行+x1*y1的操作,因此这时的结果为3+4*5=23;而在C++的r1=x1+++x1*y1中是计算完这一整行后才发生的改变,即包括了后面+x1*y1的过程,因此此时结果为3+3*5=18。对于++x2在Java和C++中是一致的,因此最后可以总结:在Java中是执行完x++后立刻发生改变,而C++中是整行执行完后才发生改变。但具体底层的原因我还没细查清楚,据说是由于编译器的不同所带来++的计算方式不同,在这里就做一个比较。