黑马程序员技术交流社区

标题: 麻烦帮忙解释一下这个问题 [打印本页]

作者: 徐传任    时间: 2012-9-20 22:07
标题: 麻烦帮忙解释一下这个问题
  1. class Test7
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int b = 5;
  6.                 int a = 6;
  7.                 b = a++;
  8.                 System.out.println(a+".."+b);
  9.         }
  10. }
  11. //这个结果是7..6,我知道a++,这样是先赋值后运算

  12. class Test8
  13. {
  14.         public static void main(String[] args)
  15.         {
  16.                 int a = 6;
  17.                 a = a++;
  18.                 int b = a;
  19.                 System.out.println(b+"..."+a);
  20.         }
  21. }
  22. //为啥这个结果就都是6..6,b为啥也是6,a=a++;a不是++了吗,b不应该是7吗?
复制代码

作者: 黑马杨晨    时间: 2012-9-20 22:16
是这样的
            int a = 6;

             a = a++;  //这里的运算顺序是:先取了右边a的值存到一个临时变量中,然后对右边的j进行+1;然后将临时变量中的值赋给a。所以a的值是6。


             int b = a;

             System.out.println(b+"..."+a);
作者: 严海荣    时间: 2012-9-20 22:20
a++值还是6,过了这行,a就可以变成7了,但是它发现自己还是6,原来它喵的a++的值赋给了a 它自己,只能委屈的还是6了。
b也跟着倒霉,被a拖下水赋了6.
作者: 王雷    时间: 2012-9-20 22:22
a = a++;     这句语句的理解有点模糊你,这是先将a的值赋给a,然后在进行++计算,所以这里a的值是++计算之前的取值   a=6
作者: 王小闲7    时间: 2012-9-20 22:37
这个问题很简单,你也说a先赋值后自加,所以你前面定义的a也就是a=a++;左边的a的值此时是6,所以打印出来a的值还是6
作者: 李健_8    时间: 2012-9-20 22:57
先赋值后运算嘛  a=a++;此时a=6;后面b=a;所以b也等于6啦
作者: 明光照    时间: 2012-9-20 23:43
a++是赋值后+1;
++a是+1后再赋值。
    {

            int a = 6;

            a = a++;//这只是一个赋值,赋值后的a的值为6

            int b = a;

            System.out.println(b+"..."+a);
            a++;
            System.out.println(a++);//这里的打印结果为7
            System.out.println(++a);//打印的为1个++a和和2个a++

    }

}

//第一个println的结果:6...6
//第二个println的结果:7
//第三个println的结果:9


    }



//6...6
//7
a++了之后再a++还是7。
作者: 杨华东    时间: 2012-9-21 11:11
有几点我要说的 希望你理解。
1,赋值方式:右边的当前值赋值给左边。
2,a++ 是先把a的当前值 赋值给同类型变量(包括自己) 然后 在自己自增一次。
3,++a是先自增一次 然后把自增后的结果作为当前值赋值给同类型变量(也包括自己啦)。
只能说到这样啦。
作者: 舒远    时间: 2012-9-21 11:57
本帖最后由 舒远 于 2012-9-21 11:59 编辑
  1. 程序员面试宝典中一个很经典的例子:
  2. public static void main(String[] args){  
  3.          int j = 0;  
  4.          for(int i = 0; i < 100; i++)  
  5.              j = j++;  
  6.          System.out.println(j);  
  7.      }  
  8. 对java来说,j的输出值是0。
  9. 因为java的中间缓存变量机制使j=j++语句可以分解成如下操作:
  10. temp = j;  
  11. j = j + 1;  
  12. j = temp;  
复制代码
因为java采用了中间缓存变量机制导致的。
作者: 蔡汉康    时间: 2012-9-21 12:18
10楼的回答很不错,留下脚印,方便日后复习
作者: 舒远    时间: 2012-9-21 12:26
andychua 发表于 2012-9-21 12:18
10楼的回答很不错,留下脚印,方便日后复习

谢谢捧场,共同学习!




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