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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梦里听传说 中级黑马   /  2014-10-9 04:24  /  2236 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看到一道题 说不出来原理 求解惑    在循环或线程中 为什么 i=i++  ;i会一直为0?原理是什么啊?

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

15 个回复

倒序浏览
i = i++;  是先把i 赋值给右边i, 然后再++。
回复 使用道具 举报
i++,i的值每次自增,而i++的值不变
回复 使用道具 举报
有这种情况吗?求题目
回复 使用道具 举报
weiyi 发表于 2014-10-9 10:00
有这种情况吗?求题目

我已经搞明白了, 你自己测试下,定义一个循环 i=i++; i的值一直为0
回复 使用道具 举报
int i=0;
while(true)
{
   i=i++;
  System.out.printlin(i);
}
打印的结果一直是0;
这道题问的就是结果为0的原理?
回复 使用道具 举报
输出语句写错了多写了个i
回复 使用道具 举报
weiyi 中级黑马 2014-10-9 15:44:44
8#
好像在哪里见过,听说i=i++;是问题语句,不同的编译器有不同的结果,这种语句不应该出现在程序中
回复 使用道具 举报
x564573138 来自手机 中级黑马 2014-10-9 18:09:00
9#
沙发。,。。。。
回复 使用道具 举报
i++不就给i赋值了吗?
回复 使用道具 举报
确实有问题,不应该啊,上面也有哥们说是问题语句。
回复 使用道具 举报
这题考的就是对JAVA内存的理解
回复 使用道具 举报

这个问题不难理解,i++是先输出,后加1.也就是说后面是system语句会先把i输出后才加1.所以第一次执行输出0是没有问题的;为什么会一直输出0呢,应该跟你的判断条件有关了。while(true)想表达什么意思呢,我一直没有看懂,我就理解成了true表达的是i=0.如果i=0就执行下面的语句,也就会一直执行输出0。但是计算机怎么理解的就不好说了。所以,应该true这儿出现了问题。
回复 使用道具 举报 0 1

因为i++的+1运算是要到i下次出现的时候才会执行,就是说此时i++的值还是0,循环内就赋值了i=0
回复 使用道具 举报
i=i+1;
i=i++;
不一样
回复 使用道具 举报
楼主的问题涉及++的运行机制。j++的过程,首先是将j的值传给temp,然后i=i+1;然后再返回temp给调用者。
所以过程是,
int temp=i;
i=i+1;
然后又把temp返回给j:
i=temp;

所以j的值永远都是初始值0;
如果只是要算次数的会直接 i++;就可以了
i++;约等于i=i+1;

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马