黑马程序员技术交流社区

标题: “++”运算符 [打印本页]

作者: 553237481    时间: 2015-9-28 21:43
标题: “++”运算符
int x=3;
for (int i=0;i < 3; i++) {
     x = x++;
}
x=x++中间有两个运算,一个是自增运算,一个是赋值运算,首先自增运算的优先级别高于赋值运算,先进行自增运算,由于++在变量的右边x++的值为3,自增后x=4,但是又被赋值为3,所以输出x的值,可以看见x的值没有发生变化,但事实上是x先自增为4,后被赋值为3
作者: 乐滋滋儿    时间: 2015-9-28 21:44
啥意思没看懂
作者: lostyou    时间: 2015-9-28 22:06
这解释看不懂啊
作者: orgcheng    时间: 2015-9-28 22:07
发帖有什么福利啊
作者: orgcheng    时间: 2015-9-28 22:08
回复加一个黑马币,赚大发了
作者: 周建星    时间: 2015-9-28 22:23
原来x  先暂在内存中,  待自增后   、将原来的x值进行赋值
作者: 921    时间: 2015-9-28 22:24
嗯,不错,学习了
作者: 罗志辉    时间: 2015-9-28 22:37
楼主你理解错了,你这里应该是先申请一个新的地址(左边x)并赋值为3,然后右边地址(原地址)x再自增1
首先jvm会读取右边x++中x的地址,再读取左边x的地址,将右边地址的值赋值给左边的地址,然后将右边的地址的数据自增1;
再次循环时,又会申请一个新的地址,并赋值为3,右边地址x再自增1;
因此最终x一直是3,不管循环多少次
如果按你说的,x先自增后已经变成4了,这时再赋值,哪来的3赋值给左边呢?
如果改成x=++x,那么就是先自增,再赋值了。
给个小题目给你:
int x=3;
x=x+(x++)+(++x);
输出x的值为多少?
作者: 三川草民    时间: 2015-9-28 22:38
知道x首先会被赋值3,x再自增1,不明白为什么
作者: jicheng1992    时间: 2015-9-28 22:45
看看交流,长长见识
作者: 553237481    时间: 2015-9-28 22:53
罗志辉 发表于 2015-9-28 22:37
楼主你理解错了,你这里应该是先申请一个新的地址(左边x)并赋值为3,然后右边地址(原地址)x再自增1
首 ...

我说的先自增后赋值,是指的++和=运算符的处理顺序,虽然是自增先执行,但是后来赋给x的值,应该是虚拟机自己开辟内存将之前x++的值存储起来的

ps 你的题目答案是不是这个
3+3+5
作者: 553237481    时间: 2015-9-28 22:54
三川草民 发表于 2015-9-28 22:38
知道x首先会被赋值3,x再自增1,不明白为什么

应该是先自增为4,再被赋值为3,不然就不会出现x的值不发生变化了
作者: 罗志辉    时间: 2015-9-28 22:59
553237481 发表于 2015-9-28 22:53
我说的先自增后赋值,是指的++和=运算符的处理顺序,虽然是自增先执行,但是后来赋给x的值,应该是虚拟机 ...

++在后,先执行赋值运算
++在前,先执行++,再进行赋值运算
++运算和赋值运算哪个优先,取决于++在前还是在后
作者: 553237481    时间: 2015-9-28 23:21
罗志辉 发表于 2015-9-28 22:59
++在后,先执行赋值运算
++在前,先执行++,再进行赋值运算
++运算和赋值运算哪个优先,取决于++在前还是 ...

我感觉你这种理解方式不太对,应该是x++有一个返回值,这个值是3,然后再对x进行自增

所以这里应该是x自增后,将返回值3再赋值给x




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