社区
Java
帖子详情
一个简单奇怪的问题,百思不得其解!
Northwindrocker
2003-08-27 09:27:39
int i = 0;
i = i++;
System.out.println(i);
告诉我结果!嘿嘿
0
谁能解释WHY?
...全文
20
21
打赏
收藏
一个简单奇怪的问题,百思不得其解!
int i = 0; i = i++; System.out.println(i); 告诉我结果!嘿嘿 0 谁能解释WHY?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
longaway
2003-09-28
打赏
举报
回复
拜托,居然有那么多专家。i 服了。
不管怎么说,这就是 java 。
i = i ++;
i = i --;
i 得值都不会变的。
之所以作为一道题目出现,就是告诉你这个事实。
真有兴趣,哪位看看字节码是怎么实现的。(我瞎猜得。)
另:
java 和 c++ 的结果确实不一样。
但是,java是有严格定义的,所有符合规范的虚拟机或者编译器都是这个结果。
c++ 就不知道是不是了。
admiralsf
2003-09-25
打赏
举报
回复
如果i=2+2*(i++);\\2
是temp=i;
i=i+1;
i=2+2*(temp);
i=2+2*(i++)+2*(i++);\\4
是temp=i;
i=i+1;\\i=1
temp=i;
i=i+1;\\i=2
i=2+2*(temp)+2*(temp);\\i=6
请问高人应怎么解释
Kinli
2003-09-25
打赏
举报
回复
to moke33(moke): 你说有对, 在C++里结果的确是1. 但不在于编译的问题, 而是机制的问题
当运行i=i++; 时, i赋了0之后, 就会被保存在寄存器, 再执行i++;
println(i);时候的i, 是寄存器里的i. 所以是0
diaopeng
2003-09-24
打赏
举报
回复
狂晕~~~~楼主在考人呀??这么简单的问题都问?
alexlex
2003-09-23
打赏
举报
回复
i = 0;
i = i++;
相当于: tmp = i; i = i + 1; i = tmp;
执行后:i = 0
这个解释最清楚,同意zhirenshao(我属老鼠)的话,自增符合的副作用大家都知道
楼主的疑惑在于i自增之后在对自己赋值的顺序问题吧,这点就像moke33(moke) 说得,
用dev c++ 执行顺序应该是 tmp = i; i = tmp; i = i + 1 先赋值再自增 结果i=1
java 执行顺序应该是 tmp = i; i = i + 1; i = temp 先自增再赋值 由于赋值取的是临时变量temp 结果i=0
fq603fq
2003-09-23
打赏
举报
回复
zhirenshao(我属老鼠) ,呵呵~我只是明显地指出了副作用符~希望对楼主有用~我觉得这正是他要问的
fq603fq
2003-09-22
打赏
举报
回复
楼上的很多人都没有说清楚它的本质啊,希望我说的有用
这个跟c++里面一样
i++和++i都是一个整体运算,前者的值等于i,后者的值等于i+1;
而++是具有副作用的运算符,无论在前面还是在后面都将改变i的值
zhirenshao
2003-09-22
打赏
举报
回复
回楼上,谁说楼上都没有说出问题本质,我看是你没有弄清楼主的疑惑
jkit(郁闷之堕落的程序员 和 csdnxw(大家帮忙) 就回答得很好嘛。 他解释了在机器内部 i = i++; 这个操作是如何完成的。
请看以上二人的回复
csdnxw
2003-09-19
打赏
举报
回复
jkit说的已经很明白了,要从类的观点看待这些问题。
to admirals,这不是编译器的bug,是逻辑错误。
i = 0;
i=2+(i++);//i=2;
1 取出i的值 temp = i // temp = i = 0
2 i自加 // temp = 0 , i = 1
3 i = 2 + temp // i = 2 + 0 = 2
何错只有?
ratjohn
2003-09-19
打赏
举报
回复
胡说!i++是先运算,再加一,所以值为0
admiralsf
2003-09-16
打赏
举报
回复
试过i=(i++);//i=0
i=2+(i++);//i=2;
i=2+(i++)+(i++);//i=3
i=2+2*(i++)+2*(i++);//i=4
i=2+2*(++i)+2*(++i);//i=8
i=2+2*(++i)+2*(i++);//i=6
充分说明第次出现的i++没执行,这一定是编译器的bug。
admiralsf
2003-09-16
打赏
举报
回复
虽然解释的通但是没有道理
peter207
2003-09-08
打赏
举报
回复
to lsy110(毛毛)
不管怎么样,i++的操作总应该在print之前执行吧
我觉得jvm的机制跟c,c++的不一样,
moke33(moke) 已经测试过c++的结果是1了
ttaomeng
2003-09-08
打赏
举报
回复
对的对的,都是一样
isquare
2003-09-08
打赏
举报
回复
上面JKIT说的很明白了,你可以在机子上试试
moke33
2003-08-27
打赏
举报
回复
这个和具体的编译器应该有一定关系吧,我在Dev-c++中测试的结果是1
jdk1.4 是0
关于++和--,在c++和java中不是一样的吗?
怎么会有这种结果?
lsy110
2003-08-27
打赏
举报
回复
噢!對不起,上面我的帖子講錯了,其實:
-------------------------------------------------
int i = 0;
i = i++; --〉如果是i++,那么此次操作后,i=1,那么println(i)等于1;由于你是i=i++,那
么當前操作i=0賦值給i!所以就有值等于0咯!
System.out.println(i);
learnner
2003-08-27
打赏
举报
回复
to geyf(其实我也不会)
'先赋值后++'是对的,但是为什么++发生在println之后呢
jkit
2003-08-27
打赏
举报
回复
x = 0
y = x++;
相当于: tmp = x; x = x + 1; y = tmp;
执行后:y = 0
i = 0;
i = i++;
相当于: tmp = i; i = i + 1; i = tmp;
执行后:i = 0
比较一下就知道了,其实很简单。
geyf
2003-08-27
打赏
举报
回复
如果是:
j=i++;
你能理解吧,先赋值后++,
加载更多回复(1)
spcomm控件,解决
一个
超
奇怪
的串口通讯
问题
,使用SPCOMM,第一次总是通讯不了
感觉就好像要激活一下这样的,不知大家有没有遇到过这样情况呢,好
奇怪
,
百思不得其解
,还请各位指教指教。 我在做串口的时候也出现这个现象,搜索的时候发现了这个帖子,但是帖子中的方法都测试了还是没有解决。...
你必须知道的495个C语言
问题
你难免会遇到各种各样的
问题
,有些可能让你
百思不得其解
,甚至翻遍图书馆,也找不到
问题
的答案。《你必须知道的495个C语言
问题
》的出版填补了这一空白。许多知识点的阐述都是其他资料中所没有的,弥足珍贵。涵盖C99...
你必须知道的495个C语言
问题
.pdf
你难免会遇到各种各样的
问题
,有些可能让你
百思不得其解
,甚至翻遍图书馆,也找不到
问题
的答案。 《你必须知道的495个C语言
问题
》的出版填补了这一空白。书中内容是世界各地的C语言用户多年来在新闻组comp.1ang.c...
《你必须知道的495个C语言
问题
》
你难免会遇到各种各样的
问题
,有些可能让你
百思不得其解
,甚至翻遍图书馆,也找不到
问题
的答案。 《你必须知道的495个C语言
问题
》的出版填补了这一空白。许多知识点的阐述都是其他资料中所没有的,弥足珍贵。 涵盖...
Dribbble开源
我
百思不得其解
,至今仍未找到解决的方法,Sina的审核又说我的app打开有错误,他不给审核通过,但是Lz在本地测试正常的呀,正常的呀混蛋!!!!) 我把apilevel限制到了4.0以上,不过这个
问题
还是会存在,还请高手...
Java
50,545
社区成员
85,620
社区内容
发帖
与我相关
我的任务
Java
Java相关技术讨论
复制链接
扫一扫
分享
社区描述
Java相关技术讨论
java
spring boot
spring cloud
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章