public class Test {
static int i = 0;
/**
 * Method main
 * int i = 0;
 *
 * @param args
 *
 */
public static void main(String[] args) {
//int i = 0;
i = i++;
System.out.println(i);
i = i++;
i = i++;
System.out.println(i++);
// TODO: Add your code here
}
}
i的输出为什么是0??????

解决方案 »

  1.   

    偶觉得i = i++;应该这么理解:
    int tmp = i;
    i = i + 1;
    i = tmp;
      

  2.   

    有什么奇怪的!好好理解一下i++和++i的区别吧?i++是先先生成值,再执行运算,而 ++i是恰好相反!
      

  3.   

    有没有重载过operator
    前缀 与 后缀 都分不清?
      

  4.   

    int operator ++ ()//前置操作符
    {
    return i+1;
    }int operator ++ (int flag)//后置操作符
    {
    int j = i;
    i += 1;
    return j;
    }
      

  5.   

    楼主把i=i++改成i++或者++i就会看到不同的结果了
      

  6.   

    如同homesos的比较专业说法,呵呵,如果理解操作符重载就很容易了。
    i++,做i= i + 1 动作,但整个expression的值(返回值)是自加前的变量值;
    而++i做同样的动作,返回自加后的变量值;
    对于赋值运算,其优先级低于自加运算,所以
    i = i++;
    也就是:
    i = (i++);
    即右边表达式中,i自加了,值成了1,但整个表达式会返回0,0再赋值给i, 这样i的值 又成了0;
    如此下面的都同理。
      

  7.   

    to  interhanchi(路曼曼其修远兮,吾将上下而求索.) 
    你说的地球人都知道,不要自以为是