代码1
public static void main(String args[]){
int i=0;
i=++i;
System.out.println(i);
}代码2
public static void main(String args[]){
int i=0;
i=i++;
System.out.println(i);
}代码1输出  1
代码2输出  0
这使我对++运算产生了疑惑,请教一下++运算的内部机理

解决方案 »

  1.   

    呵呵,结果是对的,
    我们可以这样拆分1
     int i=0;
            i=++i;
            System.out.println(i);
    -->
     int i =0;
    int j;
    j = ++i;// j=1
    i =j;
    sysout (i);2.        int i=0;
            i=i++;
            System.out.println(i);--->int i=0;
    int j ;j = i++; ///j=0
    i=j;sysout(i);
      

  2.   

    第1个是先使i加1,然后赋值给i第2个是先将右边的i赋值给左边的i,然后再加1,所以右边的i等于1,左边的i等于0。最后输出的是左边的i。
      

  3.   

    对于2的拆分似乎有点问题:
    i=i++被拆成j=i++;i=j;但是如果按这样的逻辑,这里的j=i++又会被拆成k=i++;j=k;再这样拆下去没有止境了
      

  4.   

    j = i++; ///j=0 
    i=j; 
    这里只是为了解释 i=i++; 其实只进行了一次拆分
      

  5.   

    class AddAdd{
        int i;
        int operatorAddAdd(){       //前自增
            return i+1;
        }
        int operatorAddAdd(int n){  //后自增
            int j = i;
            i+1;
            return j;
        }
    }当然这段代码是错的,你可以借助他来理解,o(∩_∩)o...
      

  6.   

    public class wz { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
            int i=0;
            int j=i++;
            System.out.println(i);
    }}
    这段代码输出的是1,原代码 i=0;i=i++;输出是0,
    public class wz { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
            int i=0;
            i=i++;
            i++;
            System.out.println(i);
    }}
    这段代码输出的也是1;这说明i=i++;语句使i指向i自加前的内存空间,
    注意:i只是对象的引用
    i=i++;的执行步骤:
    i指向一块内存空间,存储的是0;执行i++时重新分配一块空间,存储1;
    =使引用i指向存储0的内存空间。
      

  7.   

    i=i+1 i++ ++I的区别:
    i++是指在执行该语句后才加1;++i是指加1以后再执行该语句;
      

  8.   

    对于I=i++先赋值再++的说法有点问题
    如果是先赋值的话i=i++等价于(i=i)++,可是(i=i)++这个语句根本就是错的,没法编译的
      

  9.   

    这个问题java和c++中表现的不一致,在c++中i=i++;则i的值最后会变为1,java和c++是不一样的,
      

  10.   

    如果i=0,
    那么++i就是先执行i+1,在执行i=i+1,即先执行自加运算,再执行赋值运算
    那么i++就是先执行i=0,在执行i=i+1,即先执行赋值运算,再执行自加运算运算符的优先性及结合性,参见C语言附表。。