运算符基础
Java 是强类型语言,运算符优先级有着严格的规定,程序会严格按照优先级运行
Java运算符图表
运算符分类 | 结合顺序 | 运算符 |
---|---|---|
分隔符 | 左结合 | . [] ( ) ; , |
一元运算符 | 右结合 | ! ++ – - ~ |
算术运算符 | 左结合 | * / % + - |
移位运算符 | 左结合 | << >> >>> |
关系运算符 | 左结合 | < > <= >= instanceof = = != |
位运算符 | 左结合 | & ^ | |
逻辑运算符 | 左结合 | && || |
三目运算符 | 右结合 | 布尔表达式?表达式1:表达式2 |
赋值运算符 | 右结合 | = *= /= %= += -= <<= >>= >>>= &= *= |= |
上述表的优先级是从高到低,即分隔符优先级最高,赋值运算符优先级最低。优先级大家可以理解为小学数学中先括号,后乘除,再加减等等
同一优先级运算符,运算次序怎么办?
运算符结合性
结合性:指一个操作数左右两边各有一个操作符时,先按照操作的优先级决定运算次序,如果优先级相同,再按照操作符的结合性来决定运算次序
Java中各种运算符的结合性分为两种:
-
左结合性
自左向右,即先左后右
例如:
表达式: int result = x – y + z; //则y应先与 “-”号结合,执行x-y运算,然后再执行 +z的运算。
这种自左向右的结合方向就称为“左结合性”
-
右结合性
自右向左,即先右后左
例如:
int result = x = y = z = 10; 由于“=”的右结合性,应先执行z = 10; 再执行 y = z 再执行 x = y 运算
这种自右向左的结合方向就称为“右结合性”
java语言中大部分运算符也是从左到右结合的,只有一元运算符、赋值运算符和三元运算符例外