黑马程序员技术交流社区

标题: 关于运算符 [打印本页]

作者: 倉促、尋找你    时间: 2014-2-15 10:33
标题: 关于运算符
遇到一点小问题,
int  a=1;   
a  =a++;
System.out.println(a);
结果为啥还是1?a最后的值为啥没变呢?
作者: 廉伟杰    时间: 2014-2-15 10:36
   ++在后:则先运算后递增1
作者: 倉促、尋找你    时间: 2014-2-15 11:06
廉伟杰 发表于 2014-2-15 10:36
++在后:则先运算后递增1

a做++后本身不是变化了嘛?
作者: 小Zeor………    时间: 2014-2-15 12:09
呵呵,这个问题。。。。
关于a++问题
首先理解理解为一个算式 a = a+1
代码是分一行一行运行的
      1)++a
           本行代码运行前就 进行运算
      2)a++
           本行代码运行后才 进行运算

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

PS:建议初学者理解这个“=”理解为 将后面的运算结果赋值给前面的 这个可以让你好理解很多东西
作者: why168    时间: 2014-2-15 12:09
第一步: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

所以不要在单个的表达式中对相同的变量赋值超过一次
作者: wayne7sk    时间: 2014-2-15 12:30
先参与赋值运算。。然后再自加1
作者: 袁劲松    时间: 2014-2-15 12:34
表达式a=a++的运算过程是先将a的指赋予a!即先运行a=a,再自动加1,这里加1只是作为返回值出现
作者: luoanjade    时间: 2014-2-15 12:41
why168 发表于 2014-2-15 12:09
第一步:a=0
第二步:++在前是先使用后++,设定一个临时变量来代替左边的a,即temp=a++,这里temp的值是0
第 ...

这很详细了




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