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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

例:
int  a=3;
int  b=a++;
b的结果为3
老师讲的是:后++,变量本身先+1,表达式的值为加1前计算的值。
这样能很好的解释结果的由来,但是如果是赋值之前变量就已经+1了,那么名为a的内存空间所存储的数就已经变成了4,那么又是哪里储存的3赋值给了b。
求大牛解释下!

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

11 个回复

倒序浏览
这个你要知道a++和++a的区别,a++是先把a的值提取出来,再++;++a是先++之后再给值。所以其实b=a++可以看成两个式子,即 b=a;a++;
回复 使用道具 举报
“但是如果是赋值之前变量就已经+1了,那么名为a的内存空间所存储的数就已经变成了4,那么又是哪里储存的3赋值给了b。”
你这里这个“但是”实在没什么意义,对应的编译规则就是不让它在赋值之前加一。。了解这个规则就可以啦吧,将来犀利了你也可以自己写一个编译器,写成正好和他相反的。。。
回复 使用道具 举报
FFF 金牌黑马 2013-12-28 09:32:43
板凳
int  b=a++;
Java 里的规则是++最后才运算的。也就是说,先执行把a的值赋予b再执行a的自增。
以下是证明++是最后才执行的代码:
  1.                 int a = 3;
  2.                 int b = a+(a++);
  3.                 System.out.println(b+","+a);
复制代码

以上代码会输出:6,4
也就是说,会先执行3+3,3再自增++
回复 使用道具 举报
a++如果是独立运算的时候跟++a是没有去别的,但是如果是参与了运算,a++表示的是先做了运算,自身再+1,而++a表示的是先+1后,再将a参与运算,你是把这两个给搞混了吧
回复 使用道具 举报
如果是b=a++;就是先把a赋值给b,a的值为3,所以b=3;然后,a自增变成4;
如果是b=++a;就是先把a自增变成4,再把自增后的值赋给b,a和b的值都变成4.
就是  前++  和  后++  的区别
回复 使用道具 举报
这位同学我感觉是你理解错误,首先int  b=a++;是先把a的值赋值给b,b = 3,然后a再++,a = 4.我是这样理解的

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

回复 使用道具 举报
qq457986031 发表于 2013-12-28 00:23
这个你要知道a++和++a的区别,a++是先把a的值提取出来,再++;++a是先++之后再给值。所以其实b=a++可以看成 ...

那如果是a=a++呢,结果也是3呀。
回复 使用道具 举报
FFF 发表于 2013-12-28 09:32
int  b=a++;
Java 里的规则是++最后才运算的。也就是说,先执行把a的值赋予b再执行a的自增。
以下是证明++ ...

那如果是a=a++呢,结果也是3呀,是不是a++的值与赋给a的值是存在于两个内存空间里的?
回复 使用道具 举报

int  b=a++;是先把a的值赋值给b,b = 3之后,然后a再自增,是4,
int b=++a;是先把a的值自增变成4,再把4赋给b,b也成了4
你的概念好像混淆了.
回复 使用道具 举报
今天听了冯佳老湿的课终于弄明白了,a++在参与运算之前要先把a原来的值传递到寄存器里,然后自身再+1,由寄存器传递到需要调用的地方。谢谢各位的答案!
回复 使用道具 举报
内存空间没有变化,只是先把a的值赋值给了b,而后a再自增1.所以a = 4,b = 3.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马