黑马程序员技术交流社区

标题: 今天看到一个有趣现象 求解释一下运行顺序 [打印本页]

作者: 纯属礼貌#    时间: 2015-5-5 15:22
标题: 今天看到一个有趣现象 求解释一下运行顺序
本帖最后由 纯属礼貌# 于 2015-5-5 15:25 编辑
  1. public class Test {
  2.         public static void main (String[] args){
  3.         int a=10;
  4.          a=a++;//这里的运行过程是什么    结果显示是b是10,那么先赋值  但是后自加的过程到哪里去了
  5.         int b=a++;//结果意味着此处a没有自加还是10
  6.         System.out.print(b);
  7. }

  8. }
复制代码

作者: 纯属礼貌#    时间: 2015-5-5 15:23
请问自加跑那里了??
作者: ZSMAN    时间: 2015-5-5 15:34
a=a++的过程是:a=a,a+1(注意此时a+1的结果没有赋值给a)
作者: ZSMAN    时间: 2015-5-5 15:47
想要深入了解,看这里:http://blog.163.com/lqqss@126/blog/static/194167542013216115322599/
作者: sbsbsb    时间: 2015-5-5 15:51
程序执行a=a++ 时,  这时 a++ 是10,  a已经是11了, 不过 你又把a++赋值给a ,所以a又变成了10
作者: sbsbsb    时间: 2015-5-5 15:55
你要区分a++与++a的 区别,看图片

QQ截图20150505154553.png (134.49 KB, 下载次数: 28)

QQ截图20150505154553.png

作者: mah707    时间: 2015-5-5 17:41
int a=10;
//a=a++;       
int b=a++;
System.out.println(b);
你的题目这样写也一样,结果都是b=10,然后a=11,我是debug的。我想自加的过程不是原子性的,应该有个中间变量,嗯,你看看三楼的,我也是最后看三楼的,正解

作者: 陈国安    时间: 2015-5-5 17:59
你试下 a = ++a 试一下
作者: 大西洋    时间: 2015-5-5 18:46
a = a++ 转换过来就是  a = a = a+1;

Java在遇到++ 的时候,会先开辟出内存空间,存放变量自增之前的数值,然后在赋值的时候,再把变量指向这个内存中的数值,这个时候++就被忽略了。
作者: zuoyou    时间: 2015-5-5 19:39
其实有好几个这样的实例。b=a++;b=a--;b=++a;b=--a;都是关于运算符优先级的问题。前两个是先赋值再运算,后两个是先运算再赋值。
作者: 下一页5    时间: 2015-5-5 21:40
这个可以用毕老师视频里面的理解啊
int x=2;
int y;
y=x++;

System.out.println(y);//很明显y=2  分析;x先赋值给y,在自增
分析;
前++就是x先自增(先吃饭),在赋值(再跑出去玩)
后++就是x先赋值(先跑出去玩),在自增(在吃饭)
作者: 纯属礼貌#    时间: 2015-5-6 12:33
sbsbsb 发表于 2015-5-5 15:51
程序执行a=a++ 时,  这时 a++ 是10,  a已经是11了, 不过 你又把a++赋值给a ,所以a又变成了10 ...

不是应该先赋值  后自加吗
作者: 纯属礼貌#    时间: 2015-5-6 12:36
ZSMAN 发表于 2015-5-5 15:47
想要深入了解,看这里:http://blog.163.com/lqqss@126/blog/static/194167542013216115322599/

good!!!




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