本帖最后由 骄阳登峰 于 2016-5-17 07:23 编辑
class Demo {
public static void main(String[] args) {
int i = 3;
for (int j = 0; j < 5; j++) {
i = i++;
/*i=i++;在试行过程中如下:
int temp=i;//temp=3
i=i+1;//i=4
i=temp;//i=3
*/
}
System.out.println(i);
}
}
这个程序输出的i等于几?
答案是:3
解析:i++是一个表达式,是有返回值的,它的返回值就是i自加前的值
Java对自加是这样处理的:
首先把i的值(注意是值,不是引用)拷贝到一个临时变量区temp,然后对i变量加1,最后返回临时变量区temp的值。
程序第一次循环时的详细处理步骤如下:
步骤1 JVM把i值(其值是3)拷贝到临时变量区temp
步骤2 i值加1,这时候i的值是4
步骤3 返回临时变量区temp的值,注意这个值是3,没修改过。
步骤4 返回值赋值给i,此时i值被重置成3。
注意: i=i++;在试行过程中如下:
int temp=i;
i=i+1;
i=temp;
|