黑马程序员技术交流社区

标题: 一个关于变量赋值的问题 [打印本页]

作者: xxz    时间: 2015-5-28 07:34
标题: 一个关于变量赋值的问题
本帖最后由 xxz 于 2015-5-28 12:28 编辑
  1. a=0;
  2. a=a++;
  3. System.out.println(a);
  4. 结果:0
复制代码

看这段代码,考虑了好久,还是没懂答案为什么是 0;首先,就算a++ 先赋值后运算,a++ 之后,a也就等于 1 了呀。像下面的这段代码 c++后 c就等于1了
  1. int a=0,c=0;
  2. int b=c++;
  3. a=a++;
  4. System.out.println("a="+a+" ; b="+b+" ; c="+c);

  5. 结果:a=0 ; b=0 ; c=1
复制代码


问题解决了。感谢@yi95392  http://bbs.itheima.com/thread-199673-1-1.html

答案分析:
                 * 1.a++表达式是先用后加,故表达式的值为0;
                 * 2.取出a++表达式的值后,执行++操作,a变成1;
                 * 3.将之前取出来的a++表达式的值(即0)赋值给a,a变成0;
作者: niuapp    时间: 2015-5-28 08:12
我也不懂,在C里边是 1,java里怎么就变 0了
作者: 张亚超2015    时间: 2015-5-28 11:27
a++,加号在后面就是说,(a++)这个值是后加的,意思是a的值加1了,而(a++)的值还是a原来的值。
作者: xxz    时间: 2015-5-28 12:12
张亚超2015 发表于 2015-5-28 11:27
a++,加号在后面就是说,(a++)这个值是后加的,意思是a的值加1了,而(a++)的值还是a原来的值。 ...

那 第二个代码中 b=c++, c都已经加1 了。  a=a++  ;  a怎么没加1
作者: Z-CQ    时间: 2015-5-28 12:39
好给力啊,赞一个
作者: xxz    时间: 2015-6-19 21:25
Z-CQ 发表于 2015-5-28 12:39
好给力啊,赞一个

这个和编译器和虚拟机有关,在C中答案是1,java中是0。
其中a++这句话在内存中新建了一个临时变量a,所以对a的操作就不会对原来的变量a产生影响,最后输出的是原来的a的结果0,而不是变成1的另一个a。!!!
作者: cyd1058    时间: 2015-6-19 22:33
我是看不懂a,其他两个都明白
作者: guohaichang    时间: 2015-6-19 22:36
这种问题也行?




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