黑马程序员技术交流社区

标题: 新手求教关于 a++ [打印本页]

作者: 张迁    时间: 2013-4-24 00:37
标题: 新手求教关于 a++
本帖最后由 张迁 于 2013-4-24 09:43 编辑

大学里面学习过 b=a++,可以解释为先是 b =a;再是a=a+1;那对于a=a++在内存中是怎么运算的呢?
作者: 钟伟杰    时间: 2013-4-24 02:12
本帖最后由 钟伟杰 于 2013-4-24 02:14 编辑

a=a++;运算过程中java会开辟一块新的内存存放a原来的值。
最后执行赋值操作的时候也是将这块新开的内存中的值赋给了原来的内存。

从执行顺序上看:因为++在后面,所以先使用a,“使用”的含义就是a++这个表达式的值是0,
               但是并没有做赋值操作,它在整个语句的最后才做赋值,也就是说在做了++操作后再赋值的。

举个例子吧:
int a = 0;//这个没什么说的
a = a++;//等效于下面的语句:


int temp =a;//这个temp就是a++这个表达式的值
a++; //i自增
a = temp;//最终,将表达式的值赋值给i

作者: ゞSunペ果果つ    时间: 2013-4-24 07:11
对于初学者,自加自减,在赋值的语句当中,如果是b=a++,写在后面就是先赋值,后++,
写在前面的时候b=++a;就是先加后赋值。
所以我一直这样记:
先者先加,后者后加。
意思就是放到前面我就先加,放到后面我就赋值完了以后再加。
希望我的回答对你有帮助。
作者: 李德全    时间: 2013-4-24 08:44
a++,当运行这语句时,使用的是未变化的a,使用完之后,这哥们就发现后面有个++,那就+1,下次使用时,就会之后+1之后的值;
++a, 在使用他时,这哥们发现有个++在自己前面,对电脑说,等一哈,等我+1个再用。所以使用的是+1之后的值。
作者: harborbest    时间: 2013-4-24 08:50
其实最简单的方法就是,加号在变量后,就是变量先参加运算,参加完运算后,在自己在加1,a++,
加号在变量前,先自己加1后,变量在参加运算,++a。
作者: harborbest    时间: 2013-4-24 08:50
其实最简单的方法就是,加号在变量后,就是变量先参加运算,参加完运算后,在自己在加1,a++,
加号在变量前,先自己加1后,变量在参加运算,++a。
作者: 张迁    时间: 2013-4-24 09:34
钟伟杰 发表于 2013-4-24 02:12
a=a++;运算过程中java会开辟一块新的内存存放a原来的值。
最后执行赋值操作的时候也是将这块新开的内存中的 ...

嗯,我自己想的时候,让电脑执行几次a=a++;结果输出a不变,你这样说我就彻底明白了,谢谢哈!
作者: 张迁    时间: 2013-4-24 09:34
ゞSunペ果果つ 发表于 2013-4-24 07:11
对于初学者,自加自减,在赋值的语句当中,如果是b=a++,写在后面就是先赋值,后++,
写在前面的时候b=++a; ...

嗯,我记住了,谢谢哈!
作者: 张迁    时间: 2013-4-24 09:35
李德全 发表于 2013-4-24 08:44
a++,当运行这语句时,使用的是未变化的a,使用完之后,这哥们就发现后面有个++,那就+1,下次使用时,就会 ...

哈哈,这是最有效的理解方式!
作者: 张迁    时间: 2013-4-24 09:37
harborbest 发表于 2013-4-24 08:50
其实最简单的方法就是,加号在变量后,就是变量先参加运算,参加完运算后,在自己在加1,a++,
加号在变量 ...

嗯,我明白了,谢谢哈!
作者: 李德全    时间: 2013-4-25 10:04
张迁 发表于 2013-4-24 09:35
哈哈,这是最有效的理解方式!

嘻嘻 俺也是新手:lol
作者: 朱博    时间: 2013-8-21 11:23
int a=0; a=a++;的实际执行顺序是: 1.分配一块内存空间(假定为A)给a,赋值为0; 2.为了执行a++,分配一块新的内存空间(假定为B)作为暂存区,用来存储a的  原始值(即0) 3.对A空间中的a进行+1运算,此时A空间的值为1 4.由于是a=a++,即等号右边要取a+1之前的原始值,于是取出B空间的值,赋值  给A中的a,即A中本来已经变成1的a又被改成了0
作者: 疯宇    时间: 2013-9-26 02:21
李德全 发表于 2013-4-24 08:44
a++,当运行这语句时,使用的是未变化的a,使用完之后,这哥们就发现后面有个++,那就+1,下次使用时,就会 ...

有老毕的语气啊,哈哈





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