黑马程序员技术交流社区

标题: 一道java基础题!你能否答对,并写了理由! [打印本页]

作者: 黑马杨晨    时间: 2012-8-25 14:24
标题: 一道java基础题!你能否答对,并写了理由!
本帖最后由 黑马杨晨 于 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. }
复制代码
你认为结果是多少?并把理由或步骤写出来?
作者: 梁志仲    时间: 2012-8-25 14:51
本帖最后由 梁志仲 于 2012-8-25 15:05 编辑

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

System.out.println(j);


作者: 刘源    时间: 2012-8-25 14:54
本帖最后由 刘源 于 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。

作者: 贾飞雨    时间: 2012-8-25 14:59
结果永远是零,
原因是j在外面赋值为零,在进入循环之后,由于是先赋值,j=j,所以打印了,下面的循环都是这样,
作者: 唐见    时间: 2012-8-25 15:00
100吧!每循环一次j自增1。
作者: 赵云柯    时间: 2012-8-25 15:43
本帖最后由 赵云柯 于 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 15:46
受教了!
作者: 廉伟    时间: 2012-8-25 15:49
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。

作者: 郗绿阳    时间: 2012-8-25 16:15
0  这相等于永远都是j=j=j+1;由于运算符等级的问题 只执行j=j这步运算
作者: 李敬    时间: 2012-8-25 17:03
本帖最后由 李敬 于 2012-8-25 17:05 编辑

..               


作者: 黑马-王言龙    时间: 2012-8-25 18:10
本帖最后由 黑马-王言龙 于 2012-8-25 18:13 编辑

结果:0
理由:1、猜的
2、j++在内部有个临时变量存储,理由:猜的。
3、赋值100次都是将0赋给j,理由:由上述推出。
作者: 姬仁贵    时间: 2012-8-25 18:17
看看能不能看懂图

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

2P0){VWTUGKW@]82V09}I83.jpg





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2