在现实生活中我们的逻辑都差不多是从左向右的,在数学运算中,它的运算都基本也是从左向右运算的。
但在Java中就不一定了,Java中大部分的运算符其实也是自左向右计算的,但是单目运算符、赋值运算符与三目运算符例外,它们是自右向左计算的。
一般来说,单目运算符优先级较高,赋值运算符优先级较低。算术运算符优先级较高,关系和逻辑运算符优先级较低。多数运算符具有左结合性(自左向右),单目运算符、三目运算符、赋值运算符具有右结合性(自右向左)。
Java中运算符的优先级共分为14个等级,其中1级最高,14级最低。在同一个表达式中运算符优先级高的先执行。
下表列出了所有的运算符的优先级以及结合性:
优先级 | 运算符 | 结合性 |
1 | ()、[]、{} | 自左向右 |
2 | !、+、-、~、++、-- | 自右向左 |
3 | *、/、% | 自左向右 |
4 | +、- | 自左向右 |
5 | <<、>>、>>> | 自左向右 |
6 | <、<=、>、>=、instanceof | 自左向右 |
7 | ==、!= | 自左向右 |
8 | & | 自左向右 |
9 | ^ | 自左向右 |
10 | | | 自左向右 |
11 | && | 自左向右 |
12 | || | 自左向右 |
13 | ? : | 自右向左 |
14 | =、+=、-=、*=、/=、&=、|=、^=、~=、<<=、>>=、>>>= | 自右向左 |