A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. public class Test1 {

  2.         /**
  3.          * 循环的问题
  4.          */
  5.         public static void main(String args[]){
  6.                 int j = 0;
  7.                 for(int i = 0; i < 100;i++){
  8.                         j = j++;
  9.                 }
  10.                 System.out.println(j);
  11.         }
  12. }
复制代码
打印结果竟然是0,这是为什么呢?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

9 个回复

倒序浏览
你把j=j++;  改成j++;   结果应该就是100     
回复 使用道具 举报
当第一次执行到j++时,取的是j的值,然后再给j加1,
也就是说第一次执行j++时,表达式的值是0,
但是你却把0又赋给了j,到下一次循环时,j的值还是0,
你还是把0赋给j,所以j始终是0
改成j=++j就可以了

评分

参与人数 2技术分 +1 黑马币 +2 收起 理由
冯海霞 + 1
孔斌 + 2 很给力!

查看全部评分

回复 使用道具 举报
我这个不对吗??
回复 使用道具 举报
张文彬 发表于 2013-1-28 14:04
我这个不对吗??

     对!
回复 使用道具 举报
这个结果说明:j=j++;这一语句的真实运行过程应该是这样的:
第一步,等号后的j作为一个单独的表达式进行运算,得出结果为0,单独存储。
第二步,进行j++运算,使j的结果为1。
第三步,将第一步的表达式的值赋给j,得出结果为0。
回复 使用道具 举报
Gaara 高级黑马 2013-1-28 14:32:47
7#
冯海霞 发表于 2013-1-28 14:11
对!

。。。。。为什么我没有技术分啊  新手拿技术分很难的版主:'(:'(

点评

同学,技术分真心不难。以后回答问题的时候尽量详细!  发表于 2013-1-28 14:54
回复 使用道具 举报
x= j++  ;    //这句话的意思是   x = j ;  j=j+1 ;
x= ++j ;    //这句话的意思是    j=j+1;  x=j;

你的代码中
j=0;    j=j++;     那 j 永远是 0;
回复 使用道具 举报
Gaara 高级黑马 2013-1-28 14:59:45
9#
张文彬 发表于 2013-1-28 14:32
。。。。。为什么我没有技术分啊  新手拿技术分很难的版主

哦  明白了  谢谢啊  我会努力的
回复 使用道具 举报
在这要分清楚j++和++j的区别,
先加加就是数据先进行运算,然后赋值;
后加加是先赋值后预算。
j=j++;是首先把0赋值给了j,然后再加加,这样j的值还是0,所以你循环多少次都不会改变
j=++j;是首先对j进行++,这样第一次赋值就把运算后的j=1;赋值给了j;等到第二次运算时,就会从1的上面进行++;这样就会到达你要的结果了。

关于数据的自增和自减,我们只需要记住:++在前,数据先进行运算,然后再赋值;++在后,是先赋值,在运算。只要记住这个那么自增自减就没有那么难了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马