一个有趣的问题的i++问题。。求原因!!!

懒猫gg 2012-07-10 04:16:01
public class aa {
public static void main(String[] args) {
int i=0;
while(true){
i=i++;
System.out.println(i);
}


}

}
这代码的结果很出人意料!!!
...全文
632 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
huang_cl 2012-07-13
  • 打赏
  • 举报
回复
是i++不是++i,
i=i++是先将i=0赋给左边的i,再对右边的i++计算,但这个时候已经与i无关了,那是i++这个表达式的事
小努蛋 2012-07-13
  • 打赏
  • 举报
回复
无限循环。。呵呵
lliiqiang 2012-07-13
  • 打赏
  • 举报
回复
0啊。没问题
i=i++,取出i=0,然后让i自加1,然后把刚才取得的0再赋回给i,最后i还是0
续写经典 2012-07-13
  • 打赏
  • 举报
回复
0=0 结果 0
Su_Huirong 2012-07-12
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 的回复:]
看来lZ不知道运算符的优先级!
Java code
int i=0;
while(true){
i=i++;
System.out.println(i);
}

首先后缀自加运算符是这样的,先取原值,再自加;
赋值运算符要比自加运算符等级要低一些
所以他的运算过程是:i取值,i自加,把取得值赋给i;
所以这段代码不管循环多少次都会无限输出0!
Su_Huirong 2012-07-12
  • 打赏
  • 举报
回复
看来lZ不知道运算符的优先级!
int i=0;
while(true){
i=i++;
System.out.println(i);
}
++;

首先后缀自加运算符是这样的,先取原值,再自加;
赋值运算符要比自加运算符等级要低一些
所以他的运算过程是:i取值,i自加,把取得值赋给i;
所以这段代码不管循环多少次都会无限输出0!
默默的伟哥 2012-07-12
  • 打赏
  • 举报
回复
这问题一般人问不出来
zhaogang 2012-07-12
  • 打赏
  • 举报
回复
LZ应该清楚 i++ 和 ++i 的区别吧
hemmingway 2012-07-11
  • 打赏
  • 举报
回复
怎么解释C语言这样又不是0呢??

这是面向对象和面向过程语言的问题。。。

[Quote=引用 27 楼 的回复:]

6楼的博客强烈推荐 ,很经典!
引用 6 楼 的回复:

http://www.ticmy.com/?p=43
[/Quote]
张自强 2012-07-11
  • 打赏
  • 举报
回复
6楼的博客强烈推荐 ,很经典!
[Quote=引用 6 楼 的回复:]

http://www.ticmy.com/?p=43
[/Quote]
ForestDB 2012-07-11
  • 打赏
  • 举报
回复
C/C++区的月经贴。
a363722188 2012-07-11
  • 打赏
  • 举报
回复
有是一个有趣的问题哈!!呵呵呵
a363722188 2012-07-11
  • 打赏
  • 举报
回复
有是一个有趣的问题哈!!呵呵呵
koolxiaoyuer 2012-07-11
  • 打赏
  • 举报
回复
结果与编译器相关
VanBaston 2012-07-11
  • 打赏
  • 举报
回复
的确都是0
不过真正的程序中要这么写的话,会被批的
真正写程序的时候多是在循环中直接用i++或++i在有复杂的就基本上不会用了吧
hemmingway 2012-07-11
  • 打赏
  • 举报
回复
狗血的,测试了一下C#,C#输出也是0

using System;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int i = 0;
while(true){
i = i++;
Console.WriteLine("i={0}\n",i);
}
}
}
}


hemmingway 2012-07-11
  • 打赏
  • 举报
回复
用Visual Studio 2008测试也是同上,不是0啊。。。。。。
hemmingway 2012-07-11
  • 打赏
  • 举报
回复

我用Linux C在gcc编译器测试了一下,结果i是从1开始递增的,递增的。。。。。


#include<stdio.h>
int main(int argc, char *argv[])
{
int i = 0;
while(1){
i = i++;
printf("%d\n", i);
}
}
幻想0051 2012-07-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

0
因为i++可以写成,
temp=i;i=i+1;i=temp;

可以去看下《java解惑》这本书,很多像这样有意思的问题!
[/Quote]

这样i++还有什么作用???
幻想0051 2012-07-11
  • 打赏
  • 举报
回复
不是这样吗??
i=i++;分解一下过程

i=i; //i还是等于0
i=i+1; //i增为1
输出i的话就是1了;循环一次就递增一次
加载更多回复(23)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧