i++ 简单但不是很明白的问题

governlee 2009-09-07 11:48:46
int i = 0;
i = i++;
System.out.println(i);

输出: 0

问题:执行i=i++;这句后,左i=0,右i=1,那编译器怎样决定输出的是哪个i? 还是我这样理解有错误?请教大家了!
...全文
339 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq121199529 2009-09-10
  • 打赏
  • 举报
回复
刚才说的操作是说程序运行System.out.println()的操作哦!!大家别误会成是+1哦
qq121199529 2009-09-10
  • 打赏
  • 举报
回复
11 12 13是很搞笑!!10我没看出搞笑在哪里哦?
qq121199529 2009-09-10
  • 打赏
  • 举报
回复
i++是先操作后赋值,而++i就是先赋值后操作,如果你刚才改为i=++i的话,那值就是为1了!!
yuppy 2009-09-09
  • 打赏
  • 举报
回复
看看~~ 顺便帮顶
adaikiss 2009-09-09
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 zyongsheng83 的回复:]
10 11 12 13的解释真让我佩服
[/Quote]
i++={
int temp=i;
i=i+1;
return temp;
}
tianshu2000 2009-09-09
  • 打赏
  • 举报
回复
只是公司面试会用到哈
小灰狼 2009-09-09
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 iamnotahacker 的回复:]
引用 9 楼 hemowolf 的回复:
学院派的人就特喜欢把这种问题拿出来显摆,而其实这种题没有任何实质性的意义。

这种问题在C、C++、C#、Java 中测试,可能会出现不同的结果。而其实程序员只需要知道++符号放在变量的前面和后面有哪些区别即可。


楼主的这种写法对程序效率方面起不到任何作用,相反会降低程序的可读性。如果我手下的程序员出现这种写法,我会立即叫他改过来,否则请你另谋高就


不见得是显摆吧,还有的公司就搞这些来面试。最少要你能看懂这种写法是不错的。
上次面试这个++的也搞错了,晕。原来好像搞得清,看见不同的题好像又昏了,汗!!!
[/Quote]

如果我去参加面试,如果有机会我会对考官说,在我的程序中决不会有这种写法
chwoyaofei 2009-09-09
  • 打赏
  • 举报
回复
本来不认为这是个问题,但运行结果与自己理解相悖,最终也未能明白其中的运行机制,请高手详细分析这段代码是如何执行的,不甚感激!!!
飞哥在线 2009-09-09
  • 打赏
  • 举报
回复
学习了
huangqibing0626 2009-09-09
  • 打赏
  • 举报
回复
这个问题其实很简单···i++ 是先赋值后自加1,而++i是先自加1然后把所得的值赋给变量。···不知道这样讲lz有没有明白···
javaie 2009-09-09
  • 打赏
  • 举报
回复
i=i++;//是先赋值,然后再加1
i=++i;//是先加了1再赋值

还不明白,就没办法啦~
twj19840908 2009-09-09
  • 打赏
  • 举报
回复
少写一个字
是不能从表面来直接理解i++;
twj19840908 2009-09-09
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 adaikiss 的回复:]
引用 20 楼 zyongsheng83 的回复:
10 11 12 13的解释真让我佩服

i++={
int temp=i;
i=i+1;
return temp;
}
[/Quote]

完美解答 内部实现问题 能从表面来直接理解I++
奋斗并快乐着 2009-09-09
  • 打赏
  • 举报
回复
10 11 12 13的解释真让我佩服
yanliang_xt 2009-09-08
  • 打赏
  • 举报
回复

0: iconst_0 //把常数0入栈
1: istore_1 //本地常量赋值 0出栈
2: iload_1 //加载本地变量值 0又被入栈
3: iinc 1, 1 //本地变量自加1,但是不会入栈
6: istore_1 //0出栈赋给0
7: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
10: iload_1 //加载本地变量值 为0
11: invokevirtual #3; //Method java/io/PrintStream.println:(I)V
14: return
kingxiaokang 2009-09-08
  • 打赏
  • 举报
回复
i++的问题是先返回i,然后在i+1
gutan_fox 2009-09-08
  • 打赏
  • 举报
回复
我觉得由于运算优先级,先i=1,然后i=0,所以…
修改一下昵称 2009-09-08
  • 打赏
  • 举报
回复
KingZChina 2009-09-08
  • 打赏
  • 举报
回复
我同意 这题很无聊 没事分析一下 , 正规代码肯定不会这么写 , 还是多花点精力在其他事情吧
yagumo 2009-09-08
  • 打赏
  • 举报
回复
还面试呢,这种代码在我项目的编程规范里是明文禁止的,程序易读性大打折扣。
加载更多回复(13)

62,621

社区成员

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

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