黑马程序员技术交流社区
标题:
关于i = i++这句话的运行过程
[打印本页]
作者:
段浩亮
时间:
2012-3-14 20:09
标题:
关于i = i++这句话的运行过程
今天在写程序时无意中写了i = i++;这个语句 结果程序就停不下来了
原来i = i++这句话在运行后i的值并没有发生变化 经过思考我认为这句话的执行过程应该是这样的:
=号右边先把i的值取出来,紧接着i的值自增1,然后用取出来的值参与后续运算
可以用int i = 2;i =i+ (i++)+i;来验证。结果是i = 7(2+2+3)
以上有不正确的地方请大家指正
作者:
张希强
时间:
2012-3-14 20:43
int i=0 ,j=0;
i=i++;
j=++j;
System.out.println(i);
System.out.println(j);
这个程序的打印结果是:
0
1
i在执行自增运算前的结果是0,i在自增之前赋值给了i所以i的结果就是0,你把还没有改变的i赋值给了改变后的i当然i没有变。
int i=0 ;
int k=i++;
i=k;
System.out.println(i);
这段代码希望能帮助你理解。
作者:
lipanfeng
时间:
2012-3-14 20:45
没错
i=i++;先把=后边 i 的值赋给前边的 i,再次调用执行遇到 i 时, i 的值已在原基础上加1(先赋值后运算)
作者:
何祖涛
时间:
2012-3-14 20:52
本帖最后由 何祖涛 于 2012-3-14 20:53 编辑
因为i = i++;是先将i的值2存入堆栈,然后对变量区中的i自加1,这时i的值是3,但是随后又将堆栈的值2弹出赋给变量区的i,所以最后i =2。
作者:
杨波
时间:
2012-3-14 20:59
我试过:
int i =0;
i=i++;
System.out.println(i);
i =i+ (i++)+i;
System.out.println(i);
i =i+ (i++);
System.out.println(i);
结果是 1.
1
0
i=i++;是一赋值语句,执行完就结束了,应不会停不下来。
作者:
冯建鹏
时间:
2012-3-15 00:34
本帖最后由 冯建鹏 于 2012-3-15 00:36 编辑
好像我以前也出现过这种情况:
int x=0
while(x<10)
{
运行代码;
i=i++;//这句话的意思是先把i的值取出赋值给i本身参与运算后再加1,已经把以前的值赋值给i了 再加1以后不赋值给i也就没什么用了。
i+=1;//这句话行的通;这句话就等于 i=i+1;将i的值加1后,然后赋值给i本身;
//i++;这句话也行得通;
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2