表达式:(a = b) == a
这个好理解就是先进行赋值操作a = b,再进行判断
表达式:a == (a = b)
为何是先进行a == b判断,在执行赋值操作a = b,不是()的优先级最高吗?
是先执行括号里面的,再判断等等啊,没错啊
也就是这俩表达式是一样的吗?
但是:
int a = 2, b = 1;
System.out.println(a == (a = b)); // false
System.out.println((a = b) == a); // true
首先。()优先级是比==要高的,因此后面的(a=b)要结合在一块,前面的a需要和(a==b)结合在一块。但是优先级不会改变求值的顺序,因此前面的变量的值就是2,后面算出来a的值是1,因此,第一个表达式的结果是false.
对于第二个表达式,仍然是()==高,因此(a==b)中a和b先结合,然后整体和后面的a结合,计算的顺序仍然是从左向右,左边括号里先求出a值是1,这个时候由于执行了a=b,变量a的值已经变成1了,因此继续向右执行,结果就是true.
结论就是()和==只会改变值的结合,不会改变计算的顺序,一般的计算都是从左向右计算的。
具体你可以百度百科一下优先级。
希望对你有帮助!
优先级不会改变运算顺序,只是决定运算符合那些表达式结合而已。
a == (a = b) 从左往右依次执行先执行是否等于,再执行赋值。