1、这个应该和java内部机制有关,我也想不通,想必一个int变量在被赋值的同时不考虑执行其自身的++操作……,也就是说i=i++这句i值并不会改变。你将i改为4试试看,同样不会变
2、要知道,++的运算级别比+要高,也就是说i=i++ + i++ + i++;其实应该是:
i=(i+(++i)+(++i))++;
那么先执行i+(++i)+(++i)部分,很明显i已经变成3了,然后执行
i=i++;,此时问题就和1一样了,i的值不会改变
3、int i[]; index=0; i[index]=index=5; 
很明显结果i[0]=5是应该的。
i[index]=index=5; 这句拆开就是i[index]=5;index=5;,

解决方案 »

  1.   

    给你个例子
    i=0;
    i=i++ + i++ + i++ + i++ + i++;
    System.out.println(i);猜猜结果是什么?答案就是i=0+1+2+3+4 =10你的i=i++ + i++ + i++;之所以为3,是0+1+2,而不是1+1+1java中对自增是取完i的值之后立即自增,而不是等整个表达式结束后再自增.
      

  2.   

    确实奇怪,恐怕要去问sun才行
      

  3.   

    补充:2、不好意思,我看错了,i=i++ + i++ + i++;
    按优先级划分还是
    i=(i++)+ (i++) + (i++);
    那么问题就是这么说:i++运算我想应该是这么说的,在执行i++操作中,若此步未结束,i值不变(也就是说未执行到行结束符号";"处,i值不变),那么就好解释了,i=(i++)+ (i++) + (i++);,再和1题相对,转换为i=3*(i+1);,那么结果就好理解了。以上所解,未必正确!!!
      

  4.   

    我晕....to: alphazhao(绿色咖啡) 
    i=(i+(++i)+(++i))++;
    这样都行啊
    首先,他写的是i=i++ + i++ + i++;中间有空格的
    其次,你这样写是语法错误对于1
    由于是先自增,所以i先是在表达式的右边自增为1,然后被赋值为0,最后的结果为0对于3
    编译时由左向右解析,为i[0],赋值时由右向左进行,均赋为5
      

  5.   

    1、
    int i=0;
    i=++i;
    System.out.println(i);2、赋值时已经进行了运算。
      

  6.   

    在java里面:
    i++是操作后,i自动加一。
    2:i=0+1+2;
      

  7.   

    据我所知,有的机子执行方式是不一样的,有的是从左向右做的,有的是从右往左做的,所以对I++的问题有两种不同的结果,最好的方法是在表达式I++中加上括号.象上面的问题我认为应该是机子执行方式引起的,
       对于第二个问题,我认为是对的.
              首先当开始运行时i为0,结果就变为i=0+1+1;再执行的时候就变为i=1+2(最后的i自动的加1),所以是等于3.
      第三个问题就更明显了,开始时i[0]=0,往后在执行就变成i[0]=5了.  我认为你用的机子执行方式是从左到右的.
      

  8.   

    1.
    int i =0;
    i = i++;//i = 0 后缀先取值再自加一
    i = ++i;//i = 1;前缀先自加一再取值
    2.
    int i=0;
    i=i++ + i++ + i++;//i = 3;原理同上,'+'操作符顺序为左 -> 右。
    3.
    上面已经有很多了。
      

  9.   

    1.在java中,赋值运算符的运算优先级最低,肯定是先算i++,然后将i++整个表达式的值赋给i,而打印的i为被赋值的i,故输出为0;
    2.同上,最后为i=0+1+2,故i为3;
    3.赋值运算符的运算方向为由右到左;故为5;且index也为5,但是在i[index]中他用的是最原始的index=0值;
       实际就是java的运算优先级的比较,和运算方向的比较。不对之恳处请指出!
      

  10.   

    晕倒,讨论了这么久,好像也没有一个权威的答案。
    to zxl_lim() ,
    i = i++;//i = 0 后缀先取值再自加一,
    关键是i自加一后就值就是1了,我打印i为什么还是0呢?这种解释似乎行不通。
      

  11.   

    你还是没有好好看回贴......i自加一后的值就是1了,但此时还没有给左边的变量i赋值,此时要赋给它的值是0(没意见吧..),所以最后i依旧是0
    所以java与c的区别就是.....
    c:
    x=0;
    y=(x++) + (x++) + (x++) + (x++) + (x++);结果是y=0,x=5
    x是在给y赋值后再进行自增操作的java:
    x=0;
    y=(x++) + (x++) + (x++) + (x++) + (x++);结果是y=10,x=5
    x是在取出原值之后,立即自增,整个表达式的值计算完了之后,自增操作也完了,然后才是给y赋值.所以,你的i=i++;想通了没有?
      

  12.   

    看这个例子,把它们的输出想通了之后,就自然明白了.......看这个例子....
         
             int b = 0;
             int c1,c2,c3,c4,c5,c6;

    b=0;
    c1=b++;
    System.out.println("NO c1"+": "+c1); b=0;
    c2=b++ + b++;
    System.out.println("NO c2"+": "+c2); b=0;
    c3=b++ + b++ + b++;
    System.out.println("NO c3"+": "+c3); b=0;
    c4=b++ + b++ + b++ + b++;
    System.out.println("NO c4"+": "+c4); b=0;
    c5=b++ + b++ + b++ + b++ + b++;
    System.out.println("NO c5"+": "+c5); b=0;
    c6=b++ + b++ + b++ + b++ + b++ + b++;
    System.out.println("NO c6"+": "+c6);
      

  13.   

    1、为什么结果为0?在C和C++中结果为1
    int i=0;
    i=i++;
    System.out.println(i);我的想法.头一个因为他是先取值后加所以i的值还为零.2、这里输出为3,为什么?
    int i=0;
    i=i++ + i++ + i++;
    System.out.println(i);
    答:我想这句可以写成这个样子.i=0+1+2
    也就是说第一个i++是取值零.然后加1 第二个就变成了1......
    所以等于三.
      

  14.   

    1、java的内部机制问题,我以前也经常遇到;
    2、运算符优先级问题
    3、index=0;index先赋值为0,然后 i[index]=index=5 index又赋值为5 结果自然是5;
      

  15.   

    1.i=0;
    2.i=0+1+2=3;
    3.index=5;k[0]=5;k[5]=0;