黑马程序员技术交流社区

标题: 我们班级在讨论的Java小学生题目!绝对绕晕你!不服来看! [打印本页]

作者: 小沈同学    时间: 2015-6-16 18:00
标题: 我们班级在讨论的Java小学生题目!绝对绕晕你!不服来看!
  1. int a=0;
  2. a = a++;
  3. System.out.println(a);
  4. //此时打印出a的值为0
复制代码
上面这个是论坛上的题目,老师已给出解答!但是班里的熊孩子们又把这题变了个样子,把老师闹蒙了。有知道的来说说!
  1.                 int a=0;
  2.                 int b=0;
  3.                 int c =0;

  4.                 a = a++;
  5.                 System.out.println(a);//打印出a的值为0
  6.                 b = a++;
  7.                 System.out.println(a);//打印出a的值为1
  8.                 System.out.println(b);//打印出b的值为0       //问为什么这里b的值为0?
  9.                 c = ++a;
  10.                 System.out.println(a);//打印出a的值为2
  11.                 System.out.println(b);//打印出a的值为0
  12.                 System.out.println(c);//打印出a的值为2
复制代码







作者: 小沈同学    时间: 2015-6-16 18:02
:victory::victory::victory:
作者: iFmmer    时间: 2015-6-16 18:10
因为第一个a++;并没有被执行,第5行a的数值没有增加,而第二个a++;执行了,在第7行a的数值+1了。
作者: iFmmer    时间: 2015-6-16 18:25
刚才问了大神,明白了。

  1.     System.out.println(a);//打印出a的值为0
  2.     //这里的b = a++;先执行赋值,上面a是0,所以先赋值b就是0,然后a++,于是下面的a输出就是1。
  3.     b = a++;
  4.     System.out.println(a);//打印出a的值为1
  5.     System.out.println(b);//打印出b的值为0       //问为什么这里b的值为0?
复制代码



作者: 小沈同学    时间: 2015-6-16 18:31
:dizzy::dizzy:还是不懂怎么办,讲详细一点
作者: iFmmer    时间: 2015-6-16 18:48
小沈同学 发表于 2015-6-16 18:31
还是不懂怎么办,讲详细一点

好吧。。
一开始那个a = a++;
a=0你明白对吧
这个时候a是等于0的
然后进行b = a++;的运算
由于++这种运算符在后面时是先赋值后运算。
于是先执行b=a; 此时a==0,于是b就=0。
然后进行了++运算,a=a+1;
于是现在a就==1。
现在的值是a==1;b==0;
下面输出就是这样的结果
作者: Monster    时间: 2015-6-16 18:59
                int a=0;
                int b=0;
                int c =0;

                a = a++;//运算前a为0,运算是将0拷贝到临时缓冲区,a+1后再将0赋给a
                System.out.println(a);//打印出a的值为0
                b = a++;//在这行之前a=0,运算后a=1,b=0;因为a的值在+1前就赋给b了
                System.out.println(a);//打印出a的值为1
                System.out.println(b);//打印出b的值为0       //问为什么这里b的值为0?
                c = ++a;//这行之前a=1,运算后a=2,c=2,a在+1后再赋给c
                System.out.println(a);//打印出a的值为2
                System.out.println(b);//打印出b的值为0
                System.out.println(c);//打印出a的值为2


作者: 小沈同学    时间: 2015-6-16 19:02
iFmmer 发表于 2015-6-16 18:48
好吧。。
一开始那个a = a++;
a=0你明白对吧
  1.                 int a=0;
  2.         int b=0;
  3.         int c =0;

  4.         a = a++;// a先赋值给a,然后再自增。但是自增后的a没有再赋值给a,
  5.                         //而且这个a自增的运算因为没有人调用它,所以它从内存中消失
  6.            System.out.println(a);//所以打印出a的值为0
  7.         b = a++;//之后同理,a的值0先赋值给b,然后自增,而且自增后的a还是没有赋值给b,所以打印出来b=0
  8.         //但是因为此处有代码要求打印出a的值,也就是调用了这个a所以a没有从内存消失而是自增了被打印
  9.                         System.out.println(a);//打印出a的值为1
  10.                         System.out.println(b);//打印出b的值为0
复制代码


这是我的理解,有不对的吗?
作者: 小沈同学    时间: 2015-6-16 19:11
Monster 发表于 2015-6-16 18:59
int a=0;
                int b=0;
                int c =0;
  1. [code]                int a=0;
  2.         int b=0;
  3.         int c =0;

  4.         a = a++;// a先赋值给a,然后再自增。但是自增后的a没有再赋值给a,
  5.                         //而且这个a自增的运算因为没有人调用它,所以它从内存中消失
  6.            System.out.println(a);//所以打印出a的值为0
  7.         b = a++;//之后同理,a的值0先赋值给b,然后自增,而且自增后的a还是没有赋值给b,所以打印出来b=0
  8.         //但是因为此处有代码要求打印出a的值,也就是调用了这个a所以a没有从内存消失而是自增了被打印
  9.                         System.out.println(a);//打印出a的值为1
  10.                         System.out.println(b);//打印出b的值为0
复制代码


这是我的理解,有不对的吗?[/code]
作者: iFmmer    时间: 2015-6-16 19:15
小沈同学 发表于 2015-6-16 19:02
这是我的理解,有不对的吗?

恩 差不多吧
作者: guohaichang    时间: 2015-6-16 20:27
确实是小学生问题,说的没错!
作者: guohaichang    时间: 2015-6-16 20:34
果真是小学生问题,为了不沉而提问?




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