---------------------- android培训、java培训、期待与您交流!--------------------
有这么一道问题,困扰了很久时间,相信初学者也有同样的经历,
public static void main(String[] args)
{
int j=0;
for (int i = 0;i<100;i++)
{
j=j++
}
system.out.println(j);
}
输出的是多少哪?
当然答案并不是想的那样,答案是0;那么是为什么哪?
因为java中用了中间缓存变量的机制,j=j++等同于
int temp =j
j=j+1;
j=temp;
每一次循环j的值都被temp的值所初始化,所以j的值为0;
又有这么一题:
public static void main(String[] args)
{
int i =0;
i=i++ + ++i;
int j=0;
j=++j + j++ + j++ + j++;
int k=0;
k =k++ + k++ + k++ + ++k;
int h=0;
h=++h + ++h;
int p1=0,p2=0; int q1=0,,q2=0;
q1=++P1;
q2=p2++;
System.out.println(“i " +i);
System.out.println("j" +j);
System.out.println(“k" +k);
System.out.println("h" +h);
System.out.println(“p1" +p1);
System.out.println("p2" +p2);
System.out.println(“q1" +q1);
System.out.println("q2" +q2);
}}
i++和++i使用的不同点在于一个是程序完毕后自增,一个是程序开始前自增。
”i = I++ + ++i"执行的过程是先执行i++,但是i自增1操作时稍后才执行,所以此时的i还是0,然后执行++i,++i后i的值1,执行完++i后要补增i++,所以此时i 的值实际上时2,0+2=2,然后赋值给i,最终i的值是2.
“j = ++j + j++ + j++ + j++”执行的过程是先++j,所以j的值是1,然后执行j++,j++后的值仍然是1,然后再执行j++,执行后的结果仍然是1,但要补增刚才的j++,所以此时j的值实际上时2,然后执行最后一个j++,执行后的结果仍然是2,但要补增刚才的j++,所以此时的值实际上是3,所以1+1+2+3=7,最终j 的值为7。
“k=k++ + k++ + k++ + ++k”执行的过程是先k++,所以k的值是0,然后执行k++,k++后的值0,但要补增刚才的k++,所以实际上市1,然后执行最后一个k++,执行后的结果仍然为1,但要补增刚才的k++,实际值为2,最后执行++k,执行结果为3,再补增刚才的k++,实际值为4,所以0+1+2+4=7。
“h = ++h + ++h”是先自增h,h值为1,再自增h,h值为2。所以1+2=3,然后赋值给h,最终h的值为3、
“q1=++p1”先自增p1,p1的值是1,在赋值给q1,所以q1的值是1。
“q2=p2++”先赋值p2给q2,q2的值是0,然后自增p2,所以p2的值是1;
那么第一道题也是这样的j=j++,先赋值后在自增,所以值仍然为0;
以上就是我对i++和++i的认识,难免有不适之处,谢谢
---------------------- android培训、java培训、期待与您交流!--------------------




被折叠的 条评论
为什么被折叠?



