A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 段浩亮 中级黑马   /  2012-3-14 20:09  /  2449 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天在写程序时无意中写了i = i++;这个语句 结果程序就停不下来了
原来i = i++这句话在运行后i的值并没有发生变化    经过思考我认为这句话的执行过程应该是这样的:
=号右边先把i的值取出来,紧接着i的值自增1,然后用取出来的值参与后续运算
可以用int i = 2;i =i+ (i++)+i;来验证。结果是i  = 7(2+2+3)
以上有不正确的地方请大家指正

5 个回复

倒序浏览
                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);
这段代码希望能帮助你理解。
回复 使用道具 举报
没错
i=i++;先把=后边 i  的值赋给前边的 i,再次调用执行遇到 i 时, i 的值已在原基础上加1(先赋值后运算)
回复 使用道具 举报
本帖最后由 何祖涛 于 2012-3-14 20:53 编辑

因为i = i++;是先将i的值2存入堆栈,然后对变量区中的i自加1,这时i的值是3,但是随后又将堆栈的值2弹出赋给变量区的i,所以最后i =2。
回复 使用道具 举报
我试过:
                     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:36 编辑

好像我以前也出现过这种情况:
int x=0
while(x<10)
{
运行代码;
i=i++;//这句话的意思是先把i的值取出赋值给i本身参与运算后再加1,已经把以前的值赋值给i了 再加1以后不赋值给i也就没什么用了。
i+=1;//这句话行的通;这句话就等于 i=i+1;将i的值加1后,然后赋值给i本身;
//i++;这句话也行得通;
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马