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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 田建   /  2012-8-3 20:24  /  5939 人查看  /  25 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Test{
public static void main(String[] args){

int count=0;
for(int i=0;i<10;i++)
{
count=count++;
}
System.out.println("count="+count);
}
}

这里面count=count++,count++是后置运算,运算过程是先赋值,后自增++。
所以这里count的值始终为0,因为循环中每次都是赋值为0。
如果是++count就是另外一个结果了。
回复 使用道具 举报
结果为0 的原因是因为count=count++;这条语句。

count++因为++是后缀,关联性是左结合性,所以是先赋值再自增的  。

因为count的初始值是0   所以每次循环都做着同样的事情就是count  =  count即等于0 ;



class Test
{
public static void main(String[] args)
{

int count=0;
for(int i=0;i<10;i++){
count++;
}
System.out.println("count="+count);
}
}
如果代码这样修改的话就打印的就是最后累加的结果了。

回复 使用道具 举报
i=i++与i=++i的区别在于:前者是先赋值,再进行加1运算,后者是先进行加1运算,再赋值。所以此处for循环执行了10次count=count++,就相当于执行了10次
count=count,而count初值是0,所以结果还是0。
回复 使用道具 举报
周坤 发表于 2012-8-4 14:59
count=count++;这句,不是先做count++,再赋值给count,那是怎么运行的?难道是(count=count)++,这样 ...

在题目上已经给出了解答,请参见!
回复 使用道具 举报
i++是在先调用后加1,先调用i的值,后让i+1  如: i= 0 i++ 使用是0,使用后变成 1
++i则是先加1后调用,先让i+1后再调用i新值的值  
回复 使用道具 举报
class Test{

public static void main(String[] args){
int count=0;
for(int i=0;i<10;i++){
count=count++;

}
System.out.println("count="+count);

}

}

结果是:0
我的分析:   (1) int count=0;    (2)count=count++,     =count++
分析: 首先count在栈中开辟一个空间,初始值为0; 再来看看count=count++;左边的count的值为0, 右边的 count要进行赋值运算.自增运算,由于自增运算符优先级大于赋值运算符,所以先进行自增运算,
count为1,如果你认为再把1赋值给左边的count,那你就只知其一了,内存其实是这样的:
运算过程:  右边的 count会复制一份(count=0)存在栈中的一个临时空间, 然后才进行自增运算count为1值(这count是在栈中的),接着进行赋值运算,把在临时空间的count(记住这个是副本,它的值还是初始值0,并没有被改变),赋值给左边的count,结果count=0;下一个循环也是这样

回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马