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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵国刚 中级黑马   /  2013-8-13 12:35  /  2049 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵国刚 于 2013-8-14 19:47 编辑

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

        }

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

评分

参与人数 1技术分 +1 收起 理由
张智文 + 1

查看全部评分

16 个回复

倒序浏览
先赋值给了B然后才++的。
回复 使用道具 举报
第一个 运算 顺序  b=2 + 3*3    因为 A++之后 a的值已经是 3了  但是 a++ 是等于2的 所以 B=11  第二个  运算 顺序 为  b=2+3*2  JAVA从左开始计算 所以b=8
回复 使用道具 举报
べPNヤ 发表于 2013-8-13 13:42
第一个 运算 顺序  b=2 + 3*3    因为 A++之后 a的值已经是 3了  但是 a++ 是等于2的 所以 B=11  第二个   ...

那下面的13是怎么得的了
回复 使用道具 举报
demo1()运行结果为8跟我想的一样。因为a++是先赋值后运算的,所以b = 3*2 +2;然后a再自增1,第二个运行结果是b=11,不是13,但是我没有理解是怎么运算的,求大神解释。
回复 使用道具 举报
赵国刚 发表于 2013-8-13 13:49
那下面的13是怎么得的了

呃,你比我还有点混乱了
回复 使用道具 举报
本帖最后由 べPNヤ 于 2013-8-13 14:16 编辑

第二个b=a+3*a++        b=2+3*2   结果不用我说了吧   从左往右计算 不是先算的 乘法  a的值开始时2  a++之后  a=3  但是 a++ =2
回复 使用道具 举报
b = a + 3 * a++;这个结果是8,“a + 3 * a++”这个我们成为表达式,表达式的运行顺序是自左向右,第一个a等于2,第二个a也等于2,第二个a算完后就变成3,并不影响第一个a的值,所以结果是8;

a++ + 3 * a:同理这个也是自左向右的,但是第一个a取了2之后立马变成了3,所以后面一个a等于3,所以结果是11。不知道你的13怎么来的
回复 使用道具 举报
本帖最后由 べPNヤ 于 2013-8-13 14:20 编辑
赵国刚 发表于 2013-8-13 13:49
那下面的13是怎么得的了

怎么可能运行结果是13  你重新编译 在运行看看 第二个结果是 8  第一个的结果是 11  
回复 使用道具 举报
べPNヤ 发表于 2013-8-13 14:19
怎么可能运行结果是13  你重新编译 在运行看看 第二个结果是 8  第一个的结果是 11   ...

哦对啊,我应该是当时打错了
回复 使用道具 举报
本帖最后由 EYE_SEE_YOU 于 2013-8-13 14:26 编辑

请把全部代码发出来好吗,
单纯:int a = 2;


int b = a++ + 3 * a;

System.out.println(b);     // =》b=2+3*3
这里b=11
单纯:
int a = 2;

int b = a + 3 * a++;        // =》b=2+3*2

System.out.println(b);
这里b=8

回复 使用道具 举报
亲,如问题已解决请将分类的未解决改为已解决。

以后的问题贴也要及时更改分类哦~


保持队形,谢谢合作
回复 使用道具 举报


private static void demo2() {
        int a = 2;
        int b = a++ + 3 * a;、、-->2+3*3  a++运算后+1,所以是3*3
        System.out.println(b);// b=11
}
private static void demo1() {
        int a = 2;
        int b = a + 3 * a++;-->2+3*2  a++运算后才+1,所以此处仍为2
        System.out.println(b);// b=8
}
回复 使用道具 举报
杨璐敏 发表于 2013-8-13 22:29
亲,如问题已解决请将分类的未解决改为已解决。

以后的问题贴也要及时更改分类哦~

呃,这个怎么改了,我一直没找到了

点评

找公告,发帖规则  发表于 2013-8-14 19:03
回复 使用道具 举报
demo2中。a++是先赋值后自增。所以这个a的值还是2, 3*a中的自增过的,所以结果为2+3*3=11
demo1中就是2+3*2=8.理解demo2自然就理解demo1
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马