运算符优先级决定了运算的顺序,运算级高的先计算,如果优先级相同,那么运算符的结合方向决定了该如何运算。通过使用括号可以强制改变优先级。运算符优先级从高到低顺序如下。
clone new:复制对象、创建对象,无结合方向。
[:数组,结合方向左。
**:幂运算,结合方向右。
++ -- ~ (int) (float) (string) (array) (object) (bool) @:递增/递减、位取反、类型转换,结合方向右。
instanceof:类型,无结合方向。
!:逻辑非,结合方向右。
* / %:乘法、除法、取余,结合方向左。
+ - .:加法、减法、字符串连接,结合方向左。
clone new:复制对象、创建对象,无结合方向。
[:数组,结合方向左。
**:幂运算,结合方向右。
++ -- ~ (int) (float) (string) (array) (object) (bool) @:递增/递减、位取反、类型转换,结合方向右。
instanceof:类型,无结合方向。
!:逻辑非,结合方向右。
* / %:乘法、除法、取余,结合方向左。
+ - .:加法、减法、字符串连接,结合方向左。
<< >>:左移、右移,结合方向左。
< <= > >=:小于、小于等于、大于、大于等于,无结合方向。
== != === !== <> <=>:等于、不等于、全等、不全等、不等、比较运算符,无结合方向。
&:位与、引用,结合方向左。
^:位异或,结合方向左。
|:位或,结合方向左。
&&:逻辑与,结合方向左。
||:逻辑或,结合方向左。
??:null合并操作符,结合方向左。
?::三目运算符,结合方向左。
= += -= *= **= /= .= %= &= |= ^= <<= >>=:赋值运算符,结合方向右。
and:逻辑与,结合方向左。
xor:逻辑异或,结合方向左。
or:逻辑或,结合方向左。