问:下面程序运行的结果是什么?
int count = 0;
for(int i = 0;i < 100;i++)
{
count = count++;
}
System.out.println("count = "+count);
答:count = 0
首先count++是一个有返回值的表达式,返回值是count自加前面的值,java对自加处理的流程是先把count的值(不是引用),拷贝到一个临时变量区,然后对count变量加1,接着返回临时变量区的值。
所以上面代码中第一次循环执行的步骤是JVM把count的值(0)拷贝到临时变量区,然后count值加1,这时count的值是1,接着返回临时变量区的值(值还是0),最后赋值给count,此时count值被重置成0。所以上面代码语句,count = count++可以按照如下代码来理解:
int autoAdd(int count)
{
int temp = count;
count = coutn + 1;
return temp;
}
所以第一次循环后count的值还是0,其他99次的循环也是一样,最终导致count的值始终没变,任然保持最初的状态,如果想要打印100,则把语句count = count++改为count++即可。不过这个问题在不同的语言环境中是不一样的,在c++中count = count++与count++是等效的,但在Java中是不等效的。