首先,来一段小程序,我们先猜猜运行结果是怎样?
/**
* Created by Song on 2016/8/29.
* 自增长测试
*/
public class Main {
public static void main (String [] args){
int num = 0;
for (int i =0; i<10;i++){
num = num++;
System.out.println("num "+i+" :"+num);
}
System.out.println("最后值:"+num);
}
}
我觉得,很大一部分的结果可能是,最终结果num=10. 因为我们一直被教导num++是指先运算后执行自增操作。然而结果是这样吗?真实结果事实上是 num=0!!
这就涉及到不同语言对自增操作的具体实现方式了,在JVM下,num++的实现方式是这样的,首先将num的值复制到临时变量区,然后对原num值做加操作,最后返回临时变量区的num值。我们可以将num++看成是一个函数(方法)体,其执行过程等同于以下代码逻辑:
int autoIncrement(int num){
int temp = num;
num = num+1;
return temp;
}
现在可以理解了吧,对于语句 num = num++; 其右边部分可以看成一个上面的函数体,尽管在执行过程中num值确实发生了改变,但右边整体的返回值仍为执行加操作之前的值,所以不管循环多少次,num都是初始值0!!
如果吧num=num++;改成num=++num又是什么情况呢?有了这一次的经验,我们应该能推算到++num 的实现过程是这样的:
int autoIncrement(int num){
num = num+1;
return num;
}
所以答案是10!!