黑马程序员技术交流社区

标题: 想到一个比较欠抽的问题…… [打印本页]

作者: 迷失的小Z    时间: 2014-12-26 00:46
标题: 想到一个比较欠抽的问题……
int i = 3;
i = i++;
最后i的值还是3……
是右边先执行的i++然后再把没自增前的值赋值给i,如果i++后执行那么为什么i的值不是4?
不同的语言不同的编译器在这个式子上给出的结论的是不同的,有的语言把这个式子等同于:
int i = 3;
i = i;
i++;
所以得出的结论是4……
那么为什么java语言中的值是3呢……
ps:知道结论的小伙伴们给解释一下就行了,跟我一样不太明白的不必太纠结于这个,毕竟这种写法完全是抽风给自己找事做…………
作者: zhaojiajun    时间: 2014-12-26 02:14
Java中后++符表达式的结果是个值而不是一个变量。
也就是说后++符先将自己的值存储起来,然后对变量进行++;
再进行赋值操作,也就是将先存储起来的值赋给变量i,这样的操作就导致了i值被置为3了
对于C和C++来说不一样,在讲到m=i++操作时,C语言是先将i的值赋给了m,然后将i值++,这样i=i++的结果自然就是1了,C的实现中是不存在那个中间的值的存储的。
由于java和c不同的语言特性,导致了i=i++的不同之处
作者: l763631191    时间: 2014-12-26 03:43
我就是来看看的
作者: 南柯一梦境    时间: 2014-12-26 08:20
别的不懂java和C#一样的,都是结果3,这是有他们本身设定的运算符优先级决定的。这个是先运算在++的,所以值是3
作者: 小僧玄奘    时间: 2014-12-26 22:12
++i是先加 。 i++是后加。 给分吧- -
作者: 陈强fly    时间: 2014-12-27 01:29
好好看看以前的笔记,东西太多,基本上学着后面的忘了前面的,一定坚持住。
作者: 找寻小龙猫    时间: 2014-12-27 02:23
复习下吧
作者: Death、    时间: 2014-12-27 08:03
呃,看来得复习复习了
作者: lovejjfg    时间: 2014-12-27 09:48
先加后加的问题,也不用太去纠结了。
作者: 我只是一只菜鸟    时间: 2014-12-27 10:48
少年,i++是先取值赋给i,再自加
作者: abathe    时间: 2014-12-27 11:24
温故而知新
作者: xinjian00    时间: 2014-12-27 11:33
int i = 3;
i =++i ;
作者: 迷失的小Z    时间: 2015-1-9 23:11
zhaojiajun 发表于 2014-12-26 02:14
Java中后++符表达式的结果是个值而不是一个变量。
也就是说后++符先将自己的值存储起来,然后对变量进行++; ...

懂了懂了……又自己查了点资料,底层内存中的东东真的很麻烦……
作者: 迷失的小Z    时间: 2015-1-9 23:12
小僧玄奘 发表于 2014-12-26 22:12
++i是先加 。 i++是后加。 给分吧- -

你没看懂题……
作者: 迷失的小Z    时间: 2015-1-9 23:21
陈强fly 发表于 2014-12-27 01:29
好好看看以前的笔记,东西太多,基本上学着后面的忘了前面的,一定坚持住。 ...

你没看懂题……
作者: 李增宽    时间: 2015-1-9 23:24
楼上们回答的已经很清楚了,我就不多嘴了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2