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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黑马杨晨 于 2012-8-25 14:26 编辑
  1. class Demo
  2. {
  3. public static void main(String[] args)
  4. {
  5.   int j = 0;
  6.   for(int i=0;i<100;i++)
  7.    j = j++;
  8.   System.out.println(j);
  9. }
  10. }
复制代码
你认为结果是多少?并把理由或步骤写出来?

评分

参与人数 1技术分 +1 收起 理由
田建 + 1 加油!

查看全部评分

11 个回复

倒序浏览
本帖最后由 梁志仲 于 2012-8-25 15:05 编辑

打印0
j = j++;    //这里的运算顺序是:先取了右边j的值存到一个临时变量中,然后对右边的j进行+1;然后将临时变量中的值赋给j。每次存到临时变量中的值都是0

System.out.println(j);

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 刘源 于 2012-8-25 14:56 编辑

class Demo
{
public static void main(String[] args)
{
  int j = 0;
  for(int i=0;i<100;i++)
   j = j++;  
System.out.println(j);
}
}
j = j++;注意这句话你可以这样看,j=j;j++; 表示j=0,然后把0这个值赋予了j,然后j自增。j虽然自增到1但没有把这个1赋值给谁。所以下一次循环的时候 j还是等于0。
j++并不等于j=j+1。只表示j+1。
而且你for循环还没有大括号,
当然打印结果就是1个0。
回复 使用道具 举报
结果永远是零,
原因是j在外面赋值为零,在进入循环之后,由于是先赋值,j=j,所以打印了,下面的循环都是这样,
回复 使用道具 举报
100吧!每循环一次j自增1。
回复 使用道具 举报
本帖最后由 赵云柯 于 2012-8-25 15:48 编辑

打印结果是0
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int j = 0;
  6.                 for(int i=0;i<100;i++)
  7.                         j = j++;
  8.                         /*
  9.                         这句话相当于
  10.                         int temp = j;
  11.                         j = j + 1;
  12.                         j = temp;
  13.                         j最终又被temp复位为0,所以循环100次后,j的值仍旧为0
  14.                         如果希望j=100,代码可以改为
  15.                         j++;
  16.                         */
  17.                 System.out.println(j);
  18.         }
  19. }
复制代码
在单个表达式中对相同变量j的赋值不要超过一次,否则可能产生意料之外的结果。

点评

有理  发表于 2012-8-25 18:12

评分

参与人数 1黑马币 +1 收起 理由
黑马-王言龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报
唐见 中级黑马 2012-8-25 15:46:22
7#
受教了!
回复 使用道具 举报
廉伟 中级黑马 2012-8-25 15:49:54
8#
class Demo
{
public static void main(String[] args)
{
  int j = 0;
  for(int i=0;i<100;i++)
   j = j++;
  System.out.println(j);
}
}
不关怎么弄,结果都是0,你的那个 j=j++。他是先取了右边j保存,再对右边的j进行+1;然后将保存中的值赋给j。每次存到临时变量中的值都是0。
回复 使用道具 举报
0  这相等于永远都是j=j=j+1;由于运算符等级的问题 只执行j=j这步运算
回复 使用道具 举报
本帖最后由 李敬 于 2012-8-25 17:05 编辑

..               

回复 使用道具 举报
本帖最后由 黑马-王言龙 于 2012-8-25 18:13 编辑

结果:0
理由:1、猜的
2、j++在内部有个临时变量存储,理由:猜的。
3、赋值100次都是将0赋给j,理由:由上述推出。

评分

参与人数 1黑马币 +30 收起 理由
田建 + 30 有特点,才够味!

查看全部评分

回复 使用道具 举报
看看能不能看懂图

2P0){VWTUGKW@]82V09}I83.jpg (35.84 KB, 下载次数: 107)

2P0){VWTUGKW@]82V09}I83.jpg
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马