还记得在学语言的时候对于i++和++i实在是弄不清楚,今天就好好分析一下java中i++和++i的区别,C/C++里的i++和++i似乎和java不太一样,日后再分析。
首先对此记住一条:i++是先使用i的值然后再进行进行+1,而++i是先对i进行+1再使用i的值。以下对几种比较容易产生疑惑的情况进行下解析。
1.第一种情况
int i = 0;
System.out.println(i++); //先使用i的值0,再对i进行加1操作 i=1,i++=0
System.out.println(i);
i=0;
System.out.println(i);
System.out.println(++i); //先对i进行加1操作 再使用i的值即 i=1,++i=1
2.第二种情况
int h = 0;
h = h++ + ++h + ++h + ++h;
System.out.println(h);
上面代码中 刚开始h为0,h++先对h的值进行引用,此时(h++)=0,而h的值已自加为1;之后进行++h运算,先对h进行自加1,再引用h的值,之前h值为1,自加1,h此时为2,同理,后面两个++h分别为3,4.。所以最后h=0+2+3+4=9
int m = 0;
m = m++ + m++ + m++ + m++;
System.out.println(m);
跟上面的情况一样,m++先引用m值再自加,m=1,m++=0。最后m=0+1+2+3=6
3.第三种情况
int n = 0;
n = n++;
/**
* n=n++由于++的优先级比=的优先级高,所以先进行n++,此时n为1,而(n++)仍为0,进行赋值n为0
*/
System.out.println(n);
n=n++,此处的往往会出现疑问,网上的解释是,n=n++是先赋值再对n值进行自加,那么最后打印n值得到的应该是1,但是在java中发现最后n值仍为0,我的想法是:n=n++中++优先级比=的优先级高,先进行++运算,此时n值为1,而(n++)的值为0所以赋值给n,n再次变为0,所以最后打印n值为0.