int x=-1,y=0;
System.out.println(y=x++ +x);//output: -1
System.out.println(y=x+ x++);//output: -2请问下第一个表达式为什么答案是-1,++不是在计算完整个表达式才对变量进行+1操作吗?谢谢!

解决方案 »

  1.   

    System.out.println(y=x++ +x);//output: -1
    y=x++ y = 0;
    0 + x = -1;
      

  2.   

    建议楼主不要写这种费解的代码
    System.out.println(y=x++ +x);//
    y=x++ +x可以分解成两步来看x++先取x的值为-1,然后x的值变为0;则第二个x此时为0了,所以-1+0=-1,即输出-1
    System.out.println(y=x+ x++);//
    y=x+ x++这个也分成两步来看:前半部分x值为-1,后部分x++此时是先取x的值(-1),然后x再加一变为0,但x++表达式的值为-1;所以-1+(-1)=-2
      

  3.   

    如果是y=(x++ +x),应该是y=(-1 + (-1)) =-2 吧~~然后 x再+1吧,为什么不是呢~~没搞懂
      

  4.   

    我在看SCJP大全上面有道题是关于这个的,很纳闷,所以问下,谢谢各位了~
      

  5.   

    我以前的理解是后置++运算符在等号右边的所有表达式都计算完之后才对变量+1,从“System.out.println(y=x++ +x);//
    y=x++ +x可以分解成两步来看x++先取x的值为-1,然后x的值变为0;则第二个x此时为0了,所以-1+0=-1,即输出-1” 看来好象不是这样的啊!而是在它本身取值之后就马上对变量进行+1,好多书都讲的不清不楚的~~~~哎~
      

  6.   

    public class Test
    {
    public static void main(String args[])
    {
    int x=-1,y=0;
    System.out.println(x);
    System.out.println(y);
    System.out.println(y=x++ +x);//output: -1
    System.out.println(y);
    System.out.println(x);
    System.out.println(y=x+ x++);//output: 0
    }
    }看了代码你就明白了。
      

  7.   

    楼主说的答案好像不对吧
    -----------------------------
    int x=-1,y=0;
    System.out.println(y=x++ +x);//output: -1
    System.out.println(y=x+ x++);//output: 0
    ------------------------------------------------
    原因:
    1.单目运算符优先级要高所以表达式:
    y=x++ +x 等同与
    y=(x++)+x
     =-1+0 //此处因为x++表达式的值为-1,而此时x的值为0。
     =-1
    2.在第二个表达式中由于此时x的值为0。所以
    y=x+ x++
     =x+ (x++)
     =0+0 //此处因为x++表达式的值为0,而此时x的值为0。
     =0-------------------------------------------------------------------
    由此可以得出楼上的似乎解释的有问题了!
      

  8.   

    谢谢大家,谢谢huyc_fly(),我明白了~
      

  9.   

    to:aywrenyue(基本功修炼中……) 
    楼主想问的是两个表达式的差别;所以他的代码应该在第二个输出语句前重新把x的初值设为-1,y设置成为0