int i=1,m;
m=(i++)+(++i)+(++i)+(++i)+(i++);
System.out.println(m);
System.out.print(i);
这个m的值为什么是18 怎么计算的,还有刚才那个帖子里的
int i=0;
while(true){
i=i++;
System.out.println(i);
}
怎么回事 为什么会循环输出0?
应该是0 1 2 3……
才对啊?

解决方案 »

  1.   

    int i=1,m;
    m=(i++)+(++i)+(++i)+(++i)+(i++);
    System.out.println(m);
    System.out.print(i);
    这个m应该是这么算的?
    m=1+2+3+4+4
    应该是14啊?
    或者
    m=4+4+4+4+4
    是20?
    但是18哪里来的
    i++这个++不是整个表达式算完之后才开始自加吗?
      

  2.   

    int i=1,m;
    m=(i++)+(++i)+(++i)+(++i)+(i++);i=1  2  3  4  5  6
    m=1+3+4+5+5=18
      

  3.   

    LZ要先理解表达式的值,也就是说 i++ 这个表达式有个值,它的值是i,然后i本身才加1,也就是先取i的值作为表达式的值,然后i才+1,而++i的表达式是先进行+1,然后再把最后结果作为不作为表达式的值,也就是i
    先+1,然后把i+1的值作为表达式的值,所以
    (i++)+(++i)+(++i)+(++i)+(i++);
    (i++) 表达式的值是 1,然后1加1变为2
    (++i) 先进行i+1,即i变为3,然后把3作为表达式的值
    (++1) 同理i变为4,表达式的值是4
    (++i) i变为5,表达式的值是5
    (i++) 先取i的值5作为表达式的值,然后i+1变为6
    所以 m=表达式的值相加=1+3+4+5+5=18同理
    i=i++; //先取i的值0作为表达式的值,然后i+1变为1,然后把表达式的值赋给i,
            //因为表达式的值是0,所以i又变回了0,这样直道循环结束,i都是0
      

  4.   

    说的简单一点
    i=i++;
    相当于
    int temp=i++; //先取i的值0,然后i自增变为1,然后把0赋给temp,即temp是0
    i=temp;同理
    (i++)+(++i)+(++i)+(++i)+(i++);
    相当于
    int temp1=i++;
    int temp2=++i;
    int temp3=++i;
    int temp4=++i;
    int temp5=i++;
    m=temp1+temp2+temp3+temp4+temp5