黑马程序员技术交流社区

标题: 一个关于自增运算的小问题 [打印本页]

作者: 焦允    时间: 2013-8-30 23:26
标题: 一个关于自增运算的小问题
本帖最后由 焦允 于 2013-8-31 10:10 编辑

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


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

作者: 依旧    时间: 2013-8-30 23:37
++或--在前,则先自增或自减,再进行运算,如果在后则运算完成,才会进行自增或自减
b = a + 3 * a++;
输出为8,先计算 3 * a然后再算加a也就是3*2+2=8,输出结果后,才会对a进行自加操作
b = a + 3 * ++a;
输出结果为11
作者: 焦允    时间: 2013-8-30 23:43
依旧 发表于 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:50
焦允 发表于 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:44
本帖最后由 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

作者: 于XINCHENG    时间: 2013-8-31 03:08
                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


作者: 328078121    时间: 2013-8-31 07:01
a++:先运算,后自加。

++a:自加完再参加运算。
作者: xiangzi2008006    时间: 2013-8-31 09:05
  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. }
复制代码

作者: itachi    时间: 2013-8-31 09:31
++/--在前,先自增、减后运算,++/--在后先运算,再自增、减

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
作者: 静心鱼    时间: 2013-8-31 13:28
本帖最后由 静心鱼 于 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









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