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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐传任 中级黑马   /  2012-9-20 22:07  /  1613 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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吗?
复制代码

11 个回复

倒序浏览
是这样的
            int a = 6;

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


             int b = a;

             System.out.println(b+"..."+a);
回复 使用道具 举报
a++值还是6,过了这行,a就可以变成7了,但是它发现自己还是6,原来它喵的a++的值赋给了a 它自己,只能委屈的还是6了。
b也跟着倒霉,被a拖下水赋了6.
回复 使用道具 举报
a = a++;     这句语句的理解有点模糊你,这是先将a的值赋给a,然后在进行++计算,所以这里a的值是++计算之前的取值   a=6
回复 使用道具 举报
这个问题很简单,你也说a先赋值后自加,所以你前面定义的a也就是a=a++;左边的a的值此时是6,所以打印出来a的值还是6
回复 使用道具 举报
先赋值后运算嘛  a=a++;此时a=6;后面b=a;所以b也等于6啦
回复 使用道具 举报
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。
回复 使用道具 举报
有几点我要说的 希望你理解。
1,赋值方式:右边的当前值赋值给左边。
2,a++ 是先把a的当前值 赋值给同类型变量(包括自己) 然后 在自己自增一次。
3,++a是先自增一次 然后把自增后的结果作为当前值赋值给同类型变量(也包括自己啦)。
只能说到这样啦。
回复 使用道具 举报
舒远 黑马帝 2012-9-21 11:57:52
9#
本帖最后由 舒远 于 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采用了中间缓存变量机制导致的。
回复 使用道具 举报
10楼的回答很不错,留下脚印,方便日后复习
回复 使用道具 举报
舒远 黑马帝 2012-9-21 12:26:48
11#
andychua 发表于 2012-9-21 12:18
10楼的回答很不错,留下脚印,方便日后复习

谢谢捧场,共同学习!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马