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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 倉促、尋找你 中级黑马   /  2014-2-15 10:33  /  1207 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

遇到一点小问题,
int  a=1;   
a  =a++;
System.out.println(a);
结果为啥还是1?a最后的值为啥没变呢?

评分

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

查看全部评分

7 个回复

倒序浏览
   ++在后:则先运算后递增1

评分

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

查看全部评分

回复 使用道具 举报
廉伟杰 发表于 2014-2-15 10:36
++在后:则先运算后递增1

a做++后本身不是变化了嘛?
回复 使用道具 举报
呵呵,这个问题。。。。
关于a++问题
首先理解理解为一个算式 a = a+1
代码是分一行一行运行的
      1)++a
           本行代码运行前就 进行运算
      2)a++
           本行代码运行后才 进行运算

题目:
      a =  a++;
  先运行 a = a;然后 a+1没有指定任何赋值操作,所以造成了你看到的结果

PS:建议初学者理解这个“=”理解为 将后面的运算结果赋值给前面的 这个可以让你好理解很多东西

评分

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

查看全部评分

回复 使用道具 举报
第一步:a=0
第二步:++在前是先使用后++,设定一个临时变量来代替左边的a,即temp=a++,这里temp的值是0
第三步:++运算符生效,a=1
第四步:赋值语句生效,a=temp即a=0
所以最终结果是a=0

如果你换成a=++a:
第一步:a=0
第二步:temp=++a即1
第三步:++生效,a=1
第四步:开始赋值,a=temp即a=1
所以最终结果是a=1

所以不要在单个的表达式中对相同的变量赋值超过一次

评分

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

查看全部评分

回复 使用道具 举报
先参与赋值运算。。然后再自加1
回复 使用道具 举报
表达式a=a++的运算过程是先将a的指赋予a!即先运行a=a,再自动加1,这里加1只是作为返回值出现
回复 使用道具 举报
why168 发表于 2014-2-15 12:09
第一步:a=0
第二步:++在前是先使用后++,设定一个临时变量来代替左边的a,即temp=a++,这里temp的值是0
第 ...

这很详细了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马