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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yangyinhui 中级黑马   /  2013-4-6 16:07  /  1606 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yangyinhui 于 2013-4-6 18:16 编辑
  1. private static void demo2() {
  2.                 int a = 2;
  3.                 int b = a++ + 3 * a;
  4.                 System.out.println(b);// b=8
  5.         }

  6.         private static void demo1() {
  7.                 int a = 2;
  8.                 int b = a + 3 * a++;
  9.                 System.out.println(b);// b=13
  10.         }

  11. }
复制代码
今天复习发现的疑惑
我认为的是b = a + 3 * a++; b应该是9首先3 * a++为3*2为6,a再自加的到a=3,再加上前面的a到结果为9.
但是运行结果为8.求详细解释?

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

5 个回复

倒序浏览
b = a + 3 * a++; 首先,运算规则为从左到右。 a(a=2) +  3 * a++(这里的a++是先使用再自增,即3*2=6)--->2+3*2=8

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
a++是先用后加  lz肯定是明白的  你错误的原因是你把代码在自己脑海里面运行了  因为是同在一行代码  a + 3 * a++在编译的时候第二个a的值已经确定为2了 结果当然是8了  执行完这一行代码之后a才会变成3 。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
看了半天把我搞晕了,你demo1中的b是11,不是你标的13吧,demo2中的b是8没问题。
你是按照我们平时的思维去计算的,弄反了。
b = a + 3 * a++;应该先记录a的值,a此时是2,相当于2+ 3*a++;a还是2,先参与运算,变成了2+ 3*2,,结果就是8,但是此时a的值为3

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
private static void demo2() {
                int a = 2;
                int b = a++ + 3 * a;
                System.out.println(b);// b=8
        }

        private static void demo1() {
                int a = 2;
                int b = a + 3 * a++;
                System.out.println(b);// b=13
        }

}
是这样的:
int a = 2;
  int b = a++ + 3 * a;
a++是先运算后加一, b=a+3*a=8; 之后a加一变为3.
回复 使用道具 举报
若没有问题,请将帖子分类改成【已解决】~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马