黑马程序员技术交流社区

标题: 关于 i++与++i 的一些困惑~ 进来你肯定会有收获 [打印本页]

作者: 木偶_freedom    时间: 2013-7-23 22:00
标题: 关于 i++与++i 的一些困惑~ 进来你肯定会有收获
本帖最后由 木偶_freedom 于 2013-8-5 22:39 编辑

class Test{
        public static void main(String[] args){
                int a1 = 2;
                int b = a1+3*(a1++);
               
                int a2 = 2;
                int c = 3*(a2++)+a2;
               
                int a3 = 2;
                int d = a3+3*(++a3);
               
                int a4 = 2;
                int e = 3*(++a4)+a4;
               
                System.out.println("a1="+a1);
                System.out.println("b="+b);
               
                System.out.println("a2="+a2);
                System.out.println("c="+c);
               
                System.out.println("a3="+a3);
                System.out.println("d="+d);
               
                System.out.println("a4="+a4);
                System.out.println("e="+e);
        }
}

输出结果:a1=3
                 b=8
                 a2=3
                 c=9
                 a3=3
                 d=11
                 a4=3
                 e=12
希望大神 给个总结,我这会儿脑子快想炸了

第一次发帖哟~~~ 求斑竹助攻 

作者: 陈贺    时间: 2013-7-23 22:13
首先a=3没什么好说的,然后要知道++放在前面是先自加,然后在做其他的操作语句,++放在后面则是先执行其他的操作,后自加
()里是当时的值
第一个b=a1(2)+3*ai(2)++
第二个3*(a2(2)++)+a2(3)
第三个a3(2)+3*(++a3(3))
第四个3*(++a4(3))+a4(3)
作者: 张强1    时间: 2013-7-23 22:19
i++是先执行后加法运算
++i是先加后执行
这其实就是一个加法的运算观念,只要掌握i++就可以了
因为++i好理解,执行之前先给他加一下就行
而i++那是你在执行完这一句话之后在给 i 加1
作者: 木偶_freedom    时间: 2013-7-23 22:25
陈贺 发表于 2013-7-23 22:13
首先a=3没什么好说的,然后要知道++放在前面是先自加,然后在做其他的操作语句,++放在后面则是先执行其他 ...

关键是我想问的是 前面的那一个 a 为什么因为位置的不同而出现不同的值   就是说 如果 a放在前面为什么和a放在后面的值不同
作者: 陈贺    时间: 2013-7-23 22:29
木偶_freedom 发表于 2013-7-23 22:25
关键是我想问的是 前面的那一个 a 为什么因为位置的不同而出现不同的值   就是说 如果 a放在前面为什么和 ...

运算是按从左到右的顺序算的,比如3*(a2(2)++)+a2(3) 先算的3*(a2(2)++)然后在算的+a2,运算顺序是3*a2,a2++此时a2=3,+a2。
作者: 李健09    时间: 2013-7-24 11:33
本帖最后由 李健09 于 2013-7-24 11:35 编辑

i++就是i这个变量先运算,之后自增加+1
++i是先自增加1之后再运算,可以理解为i+1的和参加运算
作者: 张俊生    时间: 2013-7-24 21:32
  int a1 = 2;
  int b = a1+3*(a1++);  // 这个是++在后,自增不参与乘法运算,2+3*2=8
               
   int a2 = 2;
    int c = 3*(a2++)+a2; // 这个是++在后,自增不参与乘法运算,但后边a2参与运算的3,3*2+3=9
               
     int a3 = 2;
     int d = a3+3*(++a3);// 这个是++在前,自增参与乘法运算,2+3*3=11
               
     int a4 = 2;
     int e = 3*(++a4)+a4;// 这个是++在前,自增后参与乘法运算,但后边a4参与运算的3,3*3+3=12
作者: 徐龙飞    时间: 2013-7-24 22:55
同求,我也在纠结a的位置不同为什么值不一样
作者: 于建峰    时间: 2013-8-1 10:43
++在变量之前先进行自加运算再运行语句,在变量之后反之。
实际开发中多加括号就行了,这样简单还不容易混乱。
作者: Dej@vu    时间: 2013-8-1 18:10
public class test {
作者: Dej@vu    时间: 2013-8-1 18:10
  1. public class test {
  2.         /* 首先要理解
  3.          * (i++)是使先用i然后i在加一
  4.          * (++i)是i先加一后在使用i */
  5.         public static void main(String[] args) {
  6.                 int a1 = 2;
  7.                 int b = a1 + 3 * (a1++);//a1的值是在这行改变的.
  8.                 //先用到a1的 2+2*3=8赋值给b这条语句结束a1自身就变成3了,而不是2*3然后去加一的,++是改变自身的
  9.                 //注意:++只参与自身运算。然后a1自身加一等于3
  10.                 //下边道理是一样的  
  11.                 //希望对你有帮助
  12.                 System.out.println("b=" + b);
  13.                 System.out.println("a1=" + a1);
  14.                
  15.                 int a2 = 2;
  16.                 int c = 3 * (a2++) + a2;

  17.                 int a3 = 2;
  18.                 int d = a3 + 3 * (++a3);

  19.                 int a4 = 2;
  20.                 int e = 3 * (++a4) + a4;

  21.                 System.out.println("a2=" + a2);
  22.                 System.out.println("c=" + c);

  23.                 System.out.println("a3=" + a3);
  24.                 System.out.println("d=" + d);

  25.                 System.out.println("a4=" + a4);
  26.                 System.out.println("e=" + e);
  27.         }
  28. }

  29. /*
  30. * 输出结果:a1=3 b=8 a2=3 c=9 a3=3 d=11 a4=3 e=12
  31. */

复制代码

作者: hmYing    时间: 2013-8-3 16:33
a++是先人后己(先参加运算,再进行自增)
++a是实力很强(先自己强大:自增;再领导团队:参加运算)
作者: hmYing    时间: 2013-8-5 21:42
a++是先人后己(先参加运算,再进行自增)
++a是实力很强(先自己强大:自增;再领导团队:参加运算)




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