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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Super_Class 于 2013-6-21 00:10 编辑

class LeiJia
{
  public static void main(String[] args)

  {
        int a=5;
        a = a++;
        System.out.println("a="+a);//输出怎么是5呢?a = a++写法不对吗

        
        
  }
}

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

28 个回复

倒序浏览

回帖奖励 +2

累加原理:通过变量记录住每次变化的结果。通过循环的形式,进行累加动作。

  1. class Demo7
  2. {
  3.   public static void main(String[] args)

  4.   {
  5.         int a = 5;
  6.         int b = a++;
  7.         System.out.println("a="+a);//输出怎么是5呢?a = a++写法不对吗
  8.       
  9.         for(int i=0; i<10;i++) {
  10.                 a += i;
  11.         }
  12.         System.out.println("累加结果=" + a);        
  13.   }
  14. }
  15. /*a=6
  16. 累加结果=51
  17. */
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报

回帖奖励 +2

尹桥印 发表于 2013-6-20 16:52
a++本来就是将a自身加1,先把a赋值给等号前面的a,再将本身加1;
如果你写成a = ++a ;
打印结果就是6了,先 ...

" 先把a赋值给等号前面的a,再将本身加1;" --->>这样说的话, a还是要加1的啊,, 怎么输出5.

p.s. 你真叫enjoy?!

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报

回帖奖励 +2

shang1jk 发表于 2013-6-20 17:04
" 先把a赋值给等号前面的a,再将本身加1;" --->>这样说的话, a还是要加1的啊,, 怎么输出5.

p.s. 你真 ...

你这么一说  我貌似也有点迷糊了
求大神

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报

回帖奖励 +2

a++是先赋值后自增
++a是先自增后赋值

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报

回帖奖励 +2

尹桥印 发表于 2013-6-20 17:21
a = a++;
如果写成如下:
int b  = 0;

这也说明不了问题啊。这还是现象啊。搞不清自增到底是怎么完成的

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报

回帖奖励 +2

a=a++
先赋值再自增
a=++a;
先自增再赋值

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报

同理可以画出 a = ++5;

评分

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

查看全部评分

回复 使用道具 举报 1 0

回帖奖励 +2

加油楼主
回复 使用道具 举报

回帖奖励 +2

int a=5;
        a = a++;//先赋值再自增,而a=++a,就是先自增,后赋值
        System.out.println("a="+a);//所以这儿是5

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1

查看全部评分

回复 使用道具 举报
hx32 高级黑马 2013-6-20 20:05:03
11#

回帖奖励 +2

王靖远 发表于 2013-6-20 19:38
同理可以画出 a = ++5;
  1. class LeiJia
  2. {
  3. public static void main(String[] args)

  4. {
  5. int a=5;
  6. a = a++;
  7. System.out.println("a="+a);//输出怎么是5呢?a = a++写法不对吗
  8. System.out.println("a="+a);//输出仍然是a=5


  9. }
  10. }
复制代码
看了图解,我了解了累加的实现,然后我就想,再输出一次a值是否可以实现a=6,但是仍然是5.怎样可以输出a=6呢?(我知道++5的实现)有时间解答的话非常感谢

评分

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

查看全部评分

回复 使用道具 举报
hx32 高级黑马 2013-6-20 20:11:46
12#
尹桥印 发表于 2013-6-20 17:21
a = a++;
如果写成如下:
int b  = 0;

a=b的话输出仍然是5,直接输出a就是6.层主忽略了
回复 使用道具 举报
hx32 发表于 2013-6-20 20:05
看了图解,我了解了累加的实现,然后我就想,再输出一次a值是否可以实现a=6,但是仍然是5.怎样可以输出a= ...

因为a = a++;是左边自增运算完再赋值的,当赋值的时候,右边运算开辟的栈内存都释放了,a还是等于5。 你要想要a = 6,那就不要将a++赋给a就行了,因为没有了第二步的覆盖操作。
回复 使用道具 举报
hx32 高级黑马 2013-6-20 20:13:38
14#
尹桥印 发表于 2013-6-20 17:21
a = a++;
如果写成如下:
int b  = 0;

第一次回复理解错了,原来层主的代码是解释了为什么输出是a=5.大意了
回复 使用道具 举报
hx32 高级黑马 2013-6-20 20:14:43
15#
王靖远 发表于 2013-6-20 20:13
因为a = a++;是左边自增运算完再赋值的,当赋值的时候,右边运算开辟的栈内存都释放了,a还是等于5。 你 ...

哦,是栈内存释放的原因,明白了,谢谢
回复 使用道具 举报

回帖奖励 +2

a = a++这个写法没有错误的,++在后,先把a之前初始化的值5赋值给左边的a,先打印输出a的值5,然后再自加+1,也就是在+1前就已经打印输出ar的值了.故输出的结果是5,而表达式本身没有错误.

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1

查看全部评分

回复 使用道具 举报

回帖奖励 +2

hx32 发表于 2013-6-20 20:14
哦,是栈内存释放的原因,明白了,谢谢

额  ,差点把楼主给看错了
回复 使用道具 举报
sunriselzz 发表于 2013-6-20 21:08
a = a++这个写法没有错误的,++在后,先把a之前初始化的值5赋值给左边的a,先打印输出a的值5,然后再自加+1,也 ...

应该是a先自增为6,然后被覆盖了的过程,
回复 使用道具 举报

回帖奖励 +2

尹桥印 发表于 2013-6-20 17:17
这题还得细细思考

a=a++
这时候前面的a表示的是另一个变量
然后因为加号在后边,语句会先把后边的a赋值给前边的a,之后再执行+1......

大概意思就是这个吧{:2_32:}

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1

查看全部评分

回复 使用道具 举报

回帖奖励 +2

这个a的问题,为了方便记忆,这样理解吧。a=a++;//两个a很靠近,可以理解成右边的a先赋值给左边的a再自增;a=++a;//两个a离的较远,理解成右边的a先自增再赋值给左边的a。写代码的时候,如果容易出错,还是写成"a++;"或者"++a"都可以{:3_57:}
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马