黑马程序员技术交流社区
标题:
突然想到的关于赋值运算符的问题,看看怎么理解?
[打印本页]
作者:
HM李超
时间:
2013-8-16 19:38
标题:
突然想到的关于赋值运算符的问题,看看怎么理解?
本帖最后由 HM李超 于 2013-8-18 23:49 编辑
我们知道Java中支持符合运算符,现在以“+=”这个运算作示例,设有两个变量a,b。
一般情况下,我认为a+=b这个表达式,相当于a=a+b和a=b+a;看起来并没有什么区别,大部分情况下,运算结果一致。
看看下面的示例程序,其结果就不一样了
class Demo
{
public static void main(String[] args)
{
int a = 1;
a+=a++;
System.out.println(a); //输出:2
}
}
复制代码
上面的代码按照以前的理解可以拆解成a=a+a++和a=a++ +a这两种形式,第一种形式运算结果为2,第二种运行结果为3;
由此可以理解成Java中的a+=b表达式只能等同于a=a+b,而绝不等于a=b+a,这样理解,对吗?有知道的人能给我具体解释吗?最好给个内存图理解理解!
作者:
masterV
时间:
2013-8-16 21:22
int a = 1;
a+ = a++;// 等价于a = a + (a++);这个运算式的结果为2,因为a++是先赋值后自增的,而这个等式是获取的a自增之前的结果,因为a自增后没有再次参与运算。
a = (a++) + a;// 这个等式中,a在自增以后又参与了运算,所以结果为3。
作者:
べPNヤ
时间:
2013-8-16 22:49
楼主说的是正确的,这点我们老师也用这个例子证明过。
作者:
HM代景康
时间:
2013-8-17 14:11
楼主的说法不正确,a=a+a++相当于a是一个变量值,返回值时,返回的是a的值,而a=a++ +a中变量值相当于a++,返回值时返回的是a++,就等于多加了个a,
作者:
王松松
时间:
2013-8-17 20:33
其实 a = a+ (a++) //其中 a =1 ,a++ = 1 , a =2;
a = (a++)+ a //其中 a++ = 1 ,a = 2, a =3;
和你一起进步!{:soso_e141:}
作者:
张晓辉
时间:
2013-8-18 23:18
本帖最后由 张晓辉 于 2013-8-18 23:20 编辑
a+=b 等于a=a+b 同楼主 不能等同于a=b+a,
至于自增,如下
a=1
(1) a = a + (a++); //a在自增前要跟前面的进行运算,运算结果为2,a=2,然后a自增
(2) a = (a++) + a; //这个理解为a自增的前面没有运算,自增了以后才进行了运算,此时+a的a已经自增为2,故1+2=3,结果a=3
(3) a += (a++); //这个就是a = a + (a++)等同于(1)结果为2
(4) a += (a++) + (++a); //a=a+(a++)+(++a)先进行a+(a++)运算,结果为2,此时a已经自加,所以a的值为2,所以+(++a)是a再次先自加再与前面进行运算,就是3加上前面的运算结果2就是5,结果为5.
总之,运算过程中是有顺序的,从左到右在a++之前的运算a的值都没变,如果a++后面又有了运算,之后的a会变成自增后的结果参与运算,例如b=2 ,b+=b+(b++)*b 可写成b=b+b+(b++)*b, 10=2+2+(2)*3
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2