记得老师说过一句特别深刻的一句话:”++在后是先赋值后加1,++在后是先加1后赋值“,但是遇到了一个下面的代码,我怀疑是不是理解错了:
public class Client{ public static void main(String[] args){ int count =0; for(int i=0 ;i<10 ; i++){ count=count++; } System.out.println("count="+count); } }
这个程序输出的count等于几?是count自加10次吗?答案等于10?可以非常肯定的告诉你,答案错误!运行结果是count等于0.这是为什么呢? count++ 是表达式,是有返回值的,它的返回值是count自加前的值,java对自加是这样处理的:首先把count的值(注意是值,不是引用)拷贝到一个临时变量区,然后对count 变量加1,最后返回临时变量区的值。程序运行的详细步骤: 这里是列表文本
- 步骤1:JVM 把count 值(其值为0)拷贝到临时变量区。
- 步骤2:count值加1,这时候count的值是1。
- 步骤3:返回临时变量区的值,注意这个值是0,没修该过的。
- 步骤4:返回值赋值给count,此时count值被重置成0.
count =count ++ 可以换成这样的程序理解
public static int mockAdd (int count){ //先保存初始值 int temp=count; //做自增操作 count=count+1; //返回原始值 return temp; }
于是第一次循环后count的值还是0,其他9次循环也是一样,最终你会发现count的值始终没有变化,始终保存着最初的状态!