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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 焦允 中级黑马   /  2013-8-30 23:26  /  1648 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 焦允 于 2013-8-31 10:10 编辑

int a = 2;
int b = a + 3 * a++;
System.out.println(b);


请哪位大侠帮忙解释下上面输出的答案是什么?该怎么理解?谢谢!

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

9 个回复

倒序浏览
++或--在前,则先自增或自减,再进行运算,如果在后则运算完成,才会进行自增或自减
b = a + 3 * a++;
输出为8,先计算 3 * a然后再算加a也就是3*2+2=8,输出结果后,才会对a进行自加操作
b = a + 3 * ++a;
输出结果为11

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
依旧 发表于 2013-8-30 23:37
++或--在前,则先自增或自减,再进行运算,如果在后则运算完成,才会进行自增或自减
b = a + 3 * a++;
输出 ...

按你这样说,又怎么理解下面的呢?
int a = 2;
int b = a++ + 3 * a;
System.out.println(b);
回复 使用道具 举报
焦允 发表于 2013-8-30 23:43
按你这样说,又怎么理解下面的呢?
int a = 2;int b = a++ + 3 * a;System.out.println(b);
...

可能说得有点问题吧!你这个是当a++参与运算后前面一个a还是2,当计算到后面一个a时,a已经自加1变为3了,所以最后结果是2+3*3=11
回复 使用道具 举报
本帖最后由 yanglfree 于 2013-8-31 01:46 编辑

int a = 2;
int b = a + 3 * a++;
System.out.println(b);

先把2赋值给a,前面的计算结果为b =2+3*2=8 然后a自增1 a=2+1=3

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
                int a = 2;
                int b = a + 3 * a++;
               
                //a + 3 * a++ 的运算方向是从最左边开始按一个一个的模块(模块的分界线是+号)的方式算好每一个模块中的值,最后再进行拼接(此时,
                先将2赋值给a,也就是a + 3 * a++中的最 左边的a = 2)

                //然后再开始算a++,第二步算3 * a++,第三步才是a加上(3 * a++的结果)
                //a++:int a = 2; int temp = a; a = (int)(a + 1); return temp; (此时temp = 2)
                //此时3 * a = a * temp = 6
                //b = 8

                int a = 2;
                int b = a++ + 3 * a;
               
                //a++ + 3 * a 的运算方向与上面相同(此时,先算a++的值)
                //a++:int a = 2; int temp = a; a = (int)(a + 1); return temp; //一号模块算完了temp = 2
                //然后,开始算二号模块中的值,此时a = 3(因为,算一号模块的时候,a = (int)(a + 1); ),3 * 3 = 9
                //最后把一号模块和二号模块拼接起来,求和2 + 9 = 11

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1 可以再写简单点。

查看全部评分

回复 使用道具 举报
a++:先运算,后自加。

++a:自加完再参加运算。
回复 使用道具 举报
  1. public class Test2 {
  2.         public static void main(String[] args) {
  3.                 int a = 2;       //这时a=2
  4.                 int b = a + 3 * a++; //这时 b = 2+ 3*2(++);  a++会在=右边运算完才进行,所以这时候a是原始值
  5.                 System.out.println(b);  //这时候a=3
  6.         }

  7. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
itachi 中级黑马 2013-8-31 09:31:14
9#
++/--在前,先自增、减后运算,++/--在后先运算,再自增、减

int a = 2;
int b = a + 3 * a++;
System.out.println(b);
2+3*2=8
后面的a先运算在自增,为2,如果输出a,那么它就是3了
int a = 2;
int b = a++ + 3 * a;
System.out.println(b);
2+3*3=11
前面的a先运算再自增为2,后面的a是自增后的a为3

评分

参与人数 1技术分 +2 收起 理由
黄兴旺 + 2 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 静心鱼 于 2013-9-8 21:52 编辑

X++ 先运算后自增 ++X 先自增后运算

int a = 2;
int b = a + 3 * a++; //此时第一个a的值为2 3*a++ 中的a++应该先将a参与运算再自增 也就是先运行3*2
                             //再将a的值自增 这句话运行结束后 b的值等于2+3*2=8 而a的值则=3  
System.out.println(b);

//这种类型的题目重点这个运算是怎么运算 给你看另一个题目 你就理解了

int a = 2;
int b= a++ + a++;
System.out.println(b);
//此时 a++的先运算的运算不是指直接拿来a+a 而是可以这么理解
//我们将a++ 或者++a 看做直接参与运算的一个整体 ,此处称为式子第一个a++的 a 的 值为 2 ,a++的值由于先运算再自增 所以a++这个式子的值此时也为 2 ;
//然后对a进行自增 a的值+1变为 3
//然后再来看第二个a++ 此时的 a 值为 3,这个a++式子的值也为 3, 将这个a++先和前面a++式子进行运算 得出整个右边式子的值为 5
//将这个5 赋值给b  b的值此时为 5
//然后对a进行自增 a的值+1变为4




评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马