请问下面两个等式结果是否相同!
  
       a[i++]+=1;       a[i++]=a[i++]+1;

解决方案 »

  1.   


    a[i++]+=1;相当于a[i] +=1
    a[i++]=a[i++]+1;相当于a[i] = a[i+1] +1
      

  2.   

    你问的不对没加条件
    1假入程序里是
    System.out.println(a[b++]+=1);
    System.out.println(a[b++]=a[b++]+1);
    这个是一种结果;
    2如果是
    //System.out.println(a[b++]+=1);
    System.out.println(a[b++]=a[b++]+1);
    结果又不一样!
      

  3.   

    我测试了一下,结果不一样public class Test {
        public static void main(String[] args){
         int i=0;
         int[] a=new int[10];
         while(i<10){
         a[i++]+=1;          
         }
         for(int q =0;q<a.length;q++){
                 System.out.println(a[q]);
         }
         a = new int[10];
         i =0;
         while(i<10){
          a[i++]=a[i++]+1;
                 
         }
         for(int q=0;q<a.length;q++){
         System.out.println(a[q]+"*****");
         }
        }     
    }结果是:
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1*****
    0*****
    1*****
    0*****
    1*****
    0*****
    1*****
    0*****
    1*****
    0*****
      

  4.   

    2楼说的是我刚才提到的第2中情况2个式子分开来输出
    如果2个式子同时来输出的话相当于
    a[i++]+=1;相当于a[i] +=1 
    a[i++]=a[i++]+1;相当于a[i+1] = a[i+1+1] +1 
      

  5.   

    public class Test{
    public static void main(String [] args) {
    int [] a = {1,2,3,4};
    int i = 0;
    System.out.println(a[i++]+=1);
    System.out.println(a[i++]=a[i++]+1);
    }
    }
    又发现了个问题楼上一些兄弟们,写代码思路要灵活些,
    你们的试验代码是不是太麻烦了些?
    这样试验下去会浪费很多时间的
    给你们推荐个简单试验代码!
      

  6.   

    2楼说的很对,我试验了的
    a[i++]+=1;相当于a[i] +=1 
    a[i++]=a[i++]+1;相当于a[i] = a[i+1] +1 public static void main(String[] args) {
    int[] a = { 1, 5 };
    int i=0;
    //a[i++]+=1;
    a[i++]=a[i++]+1;
    for (int n : a){
    System.out.println(n);
    }
    System.out.println(i);
    }}
    你可以验证下
      

  7.   


    package com;public class Ts{
        public static void main(String [] args) {
            int [] a = {1,2,3,4};
            int i = 0;
            System.out.println(a[i++]+=1);
            System.out.println(i);
            System.out.println(a[i]);
            System.out.println(a[i++]+1);
            System.out.println(i);
            System.out.println(a[i++]);
        }
    }
      

  8.   

    public class Test{
      public static void main(String[] args){
        int[] a={1,5,9};
         int i=0;
        a[i++]+= 1; 
        // a[i++]=a[i++] +1;
         System.out.println(a[0]+"  "+a[1]+"  "+a[2]);
        
        int[] b={1,5,9};
        i=0;
        b[i++]=b[i++] +1;
        System.out.println(b[0]+"  "+b[1]+"  "+b[2]);
        
        System.out.println("dhdh");
        }
      }
    结果:
    2 5 9
    6 5 9
      

  9.   


    假设 i=0;       a[i++]+=1; 等价于 a[0] += 1;      a[i++]=a[i++]+1; 等价于 a[0] = a[1]+1;如果 a[0] = a[1] 则相同,反之则不同
      

  10.   

    这个问题其实涉及到一个基本问题的效率和执行顺序的问题:
    a += 1;首先会把a取出来付给一个中间变量,例如temp,然后才运算a = temp +1;
    a = a +1;编译器直接把后边a 转化为一个常量,直接相加后赋值给前面的a ,所以就这个例子来说后者效率会高些。
    a[i++] += 1;其实就是这么个意思:a[i] += 1;
    a[i++] = a[i++] + 1; 相当于a[i] = a[i+1] =1 (不同语言里面执行顺序也有关!) 
      

  11.   

    a[i++]=a[i++]+1  等于  a[i]=a[i+1]+1   最后i等于  i+2;
    a[i++]+=1  等于 a[i]=a[i]+1   最后i等于 i+1;总结出 :  i++ 只有在 被显式地写出来以后 才去 做 自加运算;
     
    我可能只知道了 大家一直都清楚的 东西  学习中。。
      

  12.   

    对于i++,实际上是先返回i的值,然后再执行i=i+1操作,所以对于a[i++]+=1;进行分解以后等价于:
                a[i] += 1; i=i+1;
    同样对 a[i++]=a[i++]+1;进行分解等价于:
                a[i]=a[i+1]+1; i=i+1; i=i+1;(这个的分解不恰当 ,其中第一次的i=i+1,应该在赋值操作之前执行 )