首页 新闻 会员 周边 捐助

Java运算符优先级问题

0
悬赏园豆:50 [已解决问题] 解决于 2019-09-04 17:20

表达式:(a = b) == a
这个好理解就是先进行赋值操作a = b,再进行判断

表达式:a == (a = b)
为何是先进行a == b判断,在执行赋值操作a = b,不是()的优先级最高吗?

whyyy的主页 whyyy | 初学一级 | 园豆:106
提问于:2019-09-04 12:26
< >
分享
最佳答案
0

是先执行括号里面的,再判断等等啊,没错啊

收获园豆:50
江南又一春 | 菜鸟二级 |园豆:254 | 2019-09-04 12:45

也就是这俩表达式是一样的吗?
但是:
int a = 2, b = 1;
System.out.println(a == (a = b)); // false
System.out.println((a = b) == a); // true

whyyy | 园豆:106 (初学一级) | 2019-09-04 13:08

首先。()优先级是比==要高的,因此后面的(a=b)要结合在一块,前面的a需要和(a==b)结合在一块。但是优先级不会改变求值的顺序,因此前面的变量的值就是2,后面算出来a的值是1,因此,第一个表达式的结果是false.

对于第二个表达式,仍然是()==高,因此(a==b)中a和b先结合,然后整体和后面的a结合,计算的顺序仍然是从左向右,左边括号里先求出a值是1,这个时候由于执行了a=b,变量a的值已经变成1了,因此继续向右执行,结果就是true.

结论就是()和==只会改变值的结合,不会改变计算的顺序,一般的计算都是从左向右计算的。

具体你可以百度百科一下优先级。

希望对你有帮助!

江南又一春 | 园豆:254 (菜鸟二级) | 2019-09-04 13:28
其他回答(1)
0

优先级不会改变运算顺序,只是决定运算符合那些表达式结合而已。

a == (a = b) 从左往右依次执行先执行是否等于,再执行赋值。

Shendu.CC | 园豆:2138 (老鸟四级) | 2019-09-04 16:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册