关于i++与++i问题

---------------------- 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培训、期待与您交流!--------------------

上一篇: JAVA设计模式--动态代理模式
下一篇: Android工具类收集
lizelinll
博客等级 码龄15年 14粉丝 7原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值