i++

正值招工季,我来给大家出一道题,关于i++的问题int x = 0;
for(int i=0; i<100; i++) {
x = x++;
}
System.out.println(x);
x = 0;
x = x++ + ++x;
System.out.println(x);自己复制后运行吧,骚年,欢迎大家踊跃讨论。javai++

解决方案 »

  1.   

    求讲解 int x = 10;
    int y = x++;
    System.out.println(y); // 10;
    System.out.println(x); // 11;

    int a = 10;
    int b = ++a;
    System.out.println(a); // 11;
    System.out.println(b); // 11;
    /*
    我搜了网上的讲解大多事理解为
    x++; 先在x所在的表达式中使用x的当前值,后让x加1
    ++x; 先把x的值加1,然后在运算中使用x的新值
    我也是这样理解的
    */
    在看他的代码:
    int x = 0;
    for(int i=0; i<100; i++) {
    // 这里x = x++;这句还没运行完,x的值为0;运行完了之后x的值不是应该加1的吗?
        x = x++; 
    }
    System.out.println(x);x = 0;
    // 这一句就完全不知道怎么拆开来解释了
    x = x++ + ++x;
    System.out.println(x);
      

  2.   

    ++优先级比+高,i++,表达式值是i,加完i,i+1,++i表达式值是i+1,加完i,i+1.
      

  3.   

    第一个打印出来的为什么是0?
    x=x++; x=0时  x++的值是0,即x=0,但是不是还要执行x的自增么?自增之后x应该是1了啊,为什么x还是0  求解释
      

  4.   

    循环里面等价于:int tmp = x++;//此句结束后tmp=0,x=1;
    x = tmp;//x重新复制为0
      

  5.   

    循环里面等价于:int tmp = x++;//此句结束后tmp=0,x=1;
    x = tmp;//x重新复制为0

    x=0
    x = x++ + ++x;
    等价于
    tmp =x++ + ++x;//2
    x=tmp;不过x++ + ++x我也不清楚为什么等于2,总感觉为1,这样的运算好像跟编译器有关,结果不一定
      

  6.   

    循环里面等价于:int tmp = x++;//此句结束后tmp=0,x=1;
    x = tmp;//x重新复制为0

    x=0
    x = x++ + ++x;
    等价于
    tmp =x++ + ++x;//2
    x=tmp;不过x++ + ++x我也不清楚为什么等于2,总感觉为1,这样的运算好像跟编译器有关,结果不一定
    x=0
    x = x++ + ++x;运算总是从左往右一步一步:
    上面等价于:int x = 0;
    int tmp1 = x++;//tmp1=0,x=1;
    int tmp2 = ++x;//tmp2=2,x=2,++的优先级高
    x = tmp1 + tmp2;//x=2
      

  7.   

    真是神奇:
    c#生成的结果和java是一样的,
    但是VC++2012,的结果是100
      

  8.   

    做这种题目 也就是 ++a 或者a++的 你按照3个步骤来 你就不会错
    以a=a++为例
    1 先把a赋给a++这个表达式
    2 a=a+1
    3 a++这个表达式赋值给a如果是++a 就把 12顺序反下
      

  9.   

    干了1年多JAVA就没见过这么写的。
    好吧,我只是吐个槽
      

  10.   

    x = x++ + ++x;和x = x + ++x;结果不用,反编译第一个比第二个多执行一次iinc操作,应该就是x++这是为啥呢,x++不是直接取值么,有点不懂
      

  11.   

    第一个:x赋值之后才执行++所以一直为0;第二个:x=0赋值之后执行++为1,再加上++x就等于2了