A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 553237481 中级黑马   /  2015-9-28 21:43  /  736 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int x=3;
for (int i=0;i < 3; i++) {
     x = x++;
}
x=x++中间有两个运算,一个是自增运算,一个是赋值运算,首先自增运算的优先级别高于赋值运算,先进行自增运算,由于++在变量的右边x++的值为3,自增后x=4,但是又被赋值为3,所以输出x的值,可以看见x的值没有发生变化,但事实上是x先自增为4,后被赋值为3

14 个回复

倒序浏览
啥意思没看懂
回复 使用道具 举报
这解释看不懂啊
回复 使用道具 举报
发帖有什么福利啊
回复 使用道具 举报
回复加一个黑马币,赚大发了
回复 使用道具 举报
原来x  先暂在内存中,  待自增后   、将原来的x值进行赋值

点评

听了你的解释我感觉清晰多了  发表于 2015-9-28 22:37
回复 使用道具 举报
921 中级黑马 2015-9-28 22:24:21
7#
嗯,不错,学习了
回复 使用道具 举报
楼主你理解错了,你这里应该是先申请一个新的地址(左边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的值为多少?
回复 使用道具 举报
知道x首先会被赋值3,x再自增1,不明白为什么
回复 使用道具 举报
看看交流,长长见识
回复 使用道具 举报
罗志辉 发表于 2015-9-28 22:37
楼主你理解错了,你这里应该是先申请一个新的地址(左边x)并赋值为3,然后右边地址(原地址)x再自增1
首 ...

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

ps 你的题目答案是不是这个
3+3+5
回复 使用道具 举报
三川草民 发表于 2015-9-28 22:38
知道x首先会被赋值3,x再自增1,不明白为什么

应该是先自增为4,再被赋值为3,不然就不会出现x的值不发生变化了
回复 使用道具 举报
553237481 发表于 2015-9-28 22:53
我说的先自增后赋值,是指的++和=运算符的处理顺序,虽然是自增先执行,但是后来赋给x的值,应该是虚拟机 ...

++在后,先执行赋值运算
++在前,先执行++,再进行赋值运算
++运算和赋值运算哪个优先,取决于++在前还是在后
回复 使用道具 举报
罗志辉 发表于 2015-9-28 22:59
++在后,先执行赋值运算
++在前,先执行++,再进行赋值运算
++运算和赋值运算哪个优先,取决于++在前还是 ...

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

所以这里应该是x自增后,将返回值3再赋值给x
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马