浅谈++i和i++区别
下午基友突然问我++i和i++啥区别,我随口扔了句先增后用和先用后增,顺便自己写了个java代码显摆了一下,达到了想要的结果,这么写的
int i = 0, k = 0; /**/ for (int j = 0; j < 10; j++) { i = i++; k = ++k; } System.out.println("i的最后结果:" + (i)); System.out.println("k的最后结果:" + (k));
执行结果:
i的最后结果0
k的最后结果10
但是越看越不淡定了,i怎么也得自增啊肯定不是0啊,但是结果就是0.
刚开始学习的C,java的时候,老师都讲过自增形式:即:i++和++i;
其实区别在于,i=i++是先赋值在自增,所以无论循环多少次,左边的i始终是0,最后结果就是0.改成i=++i,是可以达到效果的,++i是先自增在赋值。
我笃定是因为java编译器的问题,因为改成下面的样子就没有异议
int i = 0, k = 0; /**/ for (int j = 0; j < 10; j++) { i++;//或者i = i+1 ++k; } System.out.println("i的最后结果:" + (i)); System.out.println("k的最后结果:" + (k));
i的最后结果10
k的最后结果10
那就换成VS试试,用C#吧,代码如下:
int m = 0,n = 0; for (int j = 0; j < 10; j++) { m=m++; ++n; } MessageBox.Show("m的最后结果:" + (m) + ";" +"n的最后结果:" + (n));
结果:
m的最后结果0;n的最后结果10
没有任何的问题,不是IDE的问题,姑且这么理解吧:
public static int count(int i) { // TODO Auto-generated method stub //选保存初始值,编译器开辟的临时变量区 int temp=i; //做自增 i = i++; //返回原始值 return temp; }
所以,要自增就用i=++i,但是一般是直接用i++,这样更好;这也算是一个自增陷阱。
浙公网安备 33010602011771号