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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xxz 中级黑马   /  2015-5-28 07:34  /  715 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 xxz 于 2015-5-28 12:28 编辑
  1. a=0;
  2. a=a++;
  3. System.out.println(a);
  4. 结果:0
复制代码

看这段代码,考虑了好久,还是没懂答案为什么是 0;首先,就算a++ 先赋值后运算,a++ 之后,a也就等于 1 了呀。像下面的这段代码 c++后 c就等于1了
  1. int a=0,c=0;
  2. int b=c++;
  3. a=a++;
  4. System.out.println("a="+a+" ; b="+b+" ; c="+c);

  5. 结果:a=0 ; b=0 ; c=1
复制代码


问题解决了。感谢@yi95392  http://bbs.itheima.com/thread-199673-1-1.html

答案分析:
                 * 1.a++表达式是先用后加,故表达式的值为0;
                 * 2.取出a++表达式的值后,执行++操作,a变成1;
                 * 3.将之前取出来的a++表达式的值(即0)赋值给a,a变成0;

评分

参与人数 1黑马币 +20 收起 理由
shewim + 20

查看全部评分

8 个回复

倒序浏览
niuapp 来自手机 中级黑马 2015-5-28 08:12:04
沙发
我也不懂,在C里边是 1,java里怎么就变 0了
回复 使用道具 举报
a++,加号在后面就是说,(a++)这个值是后加的,意思是a的值加1了,而(a++)的值还是a原来的值。
回复 使用道具 举报
张亚超2015 发表于 2015-5-28 11:27
a++,加号在后面就是说,(a++)这个值是后加的,意思是a的值加1了,而(a++)的值还是a原来的值。 ...

那 第二个代码中 b=c++, c都已经加1 了。  a=a++  ;  a怎么没加1

点评

楼主你还是没真正理解a++或++a,我说很明白了,不管是++a还是a++操作之后a的值都会加1,区别是(a++)是a之前的值,而(++a)是加一之后的值也就是a的值,我加(是为了让你好理解,去掉括号一样的,希望采纳)   发表于 2015-6-15 23:16
回复 使用道具 举报
Z-CQ 来自手机 中级黑马 2015-5-28 12:39:40
报纸
好给力啊,赞一个
回复 使用道具 举报
Z-CQ 发表于 2015-5-28 12:39
好给力啊,赞一个

这个和编译器和虚拟机有关,在C中答案是1,java中是0。
其中a++这句话在内存中新建了一个临时变量a,所以对a的操作就不会对原来的变量a产生影响,最后输出的是原来的a的结果0,而不是变成1的另一个a。!!!
回复 使用道具 举报
我是看不懂a,其他两个都明白
回复 使用道具 举报
这种问题也行?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马