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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  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:04

12 个回复

倒序浏览
:victory::victory::victory:
回复 使用道具 举报
因为第一个a++;并没有被执行,第5行a的数值没有增加,而第二个a++;执行了,在第7行a的数值+1了。
回复 使用道具 举报
刚才问了大神,明白了。

  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?
复制代码


回复 使用道具 举报
:dizzy::dizzy:还是不懂怎么办,讲详细一点
回复 使用道具 举报
小沈同学 发表于 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;
下面输出就是这样的结果
回复 使用道具 举报
                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

回复 使用道具 举报
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
复制代码


这是我的理解,有不对的吗?
回复 使用道具 举报
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]
回复 使用道具 举报
小沈同学 发表于 2015-6-16 19:02
这是我的理解,有不对的吗?

恩 差不多吧
回复 使用道具 举报
确实是小学生问题,说的没错!
回复 使用道具 举报
果真是小学生问题,为了不沉而提问?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马