Java中的运算符和各种运算符的优先级和结合性及注意事项整理
(1)算术运算符
Java运算符 | 算术运算符 | 代数表达式 | Java表达式 |
加 | + | a+1 | a+1 |
减 | - | a-b | a-b |
乘 | * | ab | a*b |
除 | / | a/b | a/b |
求模/余 | % | a mod b | a%b |
注意:
1>Java 中没有求幂的算术运算符
2>Java 中没有表示指数运算的运算符
(2)等式和关系运算符
代数等式和关系运算符 | Java等式或关系运算符 | Java条件表达式示例 | Java条件表达式含义 |
等式运算符 | |||
== | a==b | a等于b | |
!= | a!=b | a不等于b | |
关系运算符 | |||
> |
> |
a>b | a大于b |
< | < | a | a小于b |
≥ | >= | a>=b | a大于等于b |
≤ | <= | a<=b | a小于等于b |
注意:
1>不能将相等运算符“==”与赋值运算符“=”混为一谈,会导致逻辑错误或者语法错误。
2>由两个符号组成的运算符中,两个符号之间不能出现空格,否则,将会产生语法错误。
(3)复合赋值运算符
Java中提供了几个复合赋值运算符,用以简化赋值运算表达式。任何一种类似于下面形式的表达式:
变量 = 变量 运算符 表达式;
其中,运算符可以是二元运算符+,-,*,/和%以及其它运算符中的某一个,都可以转换成下面这种形式:
变量 运算符 = 表达式;
例,下面为算术赋值运算符
赋值运算符 | 示例表达式 | 说明 | 赋值操作 |
+= | c = 3,c += 7 | c = c + 7 | 将10赋给c |
-= | d = 5,d -= 4 | d = d - 4 | 将1赋给d |
*= | e = 4,e *= 5 | e = e * 5 | 将20赋给e |
/= | f = 6,f /= 3 | f = f / 3 | 将2赋给f |
%= | g = 12,g %= 9 | g = g % 9 | 将3赋给g |
(4)自增和自减运算符
Java提供了两个一元运算符一元自增运算符“++”和一元自减运算符“--”,用于在一个数字变量上加1和减1。自增(或自减)运算符放在变量的前面,相应的称之为前自增(或前自减)运算符。自增(或自减)运算符放在变量的后面,相应的称之为后自增(或后自减)运算符(在Java语言规范中,分别用术语“前自增量运算符”、“后置增量运算符”、“前自减量运算符”和“后置减量运算符”来描述这些运算符)。
运算符 | 名称 | 示例表达式 | 说明 |
++ | 前自增运算符 | ++a | 先对a加1,然后在出现a的表达式中用a的新值进行运算 |
++ | 后自增运算符 | a++ | 先用a的值参与它所在表达式中的运算,然后对a加1 |
-- | 前自减运算符 | --b | 先对b减1,然后在出现b的表达式中用b的新值进行运算 |
-- | 后自减运算符 | b-- | 先用b的值参与它所在表达式中的运算,然后对b减1 |
注意:
1>算术复合赋值运算符、自增运算符以及自减运算符,都可用于简化程序语句。例如,
a = a + 1;
可以用赋值运算符更简洁的写为:
a += 1;
若使用前自增运算符,可以简化为:
++ a;
若使用后自增运算符,则可以简化为:
a ++;
在这里一定要注意,当在一条语句只是将一个变量本身自增或自减时,那么前自增和后自增形式具有相同的效果,前自减和后自减形式的效果也相同。只有当变量出现在一个较大的表达式中时,对变量执行前自增和后自增运算才会产生不同的结果(前自减和后自减也类似)。
2>只有变量或者结果为变量的表达式,才可以出现在赋值运算符的左边。试图对一个表达式而不是一个可被赋值的变量使用自增或自减运算符是一种语法错误。例如,++(x+1)是一种语法错误,因为(x+1)不是一个变量。
(5)逻辑运算符
Java中提供了逻辑运算符,使得程序员可以通过组合条件来形成更加复杂的条件。逻辑运算符有:&&(条件与)、||(条件或)、&(布尔逻辑与)、|(布尔逻辑或)、^(布尔逻辑异或)和!(逻辑非,也称为逻辑反)。
<1>逻辑与运算符(&&)
运用:在选择某条执行路径时,需要确保两个条件同时为真。
下表为(&&)运算符的运算规则真值表
表达式1 | 表达式2 | 表达式1&&表达式2 |
false | false | false |
false | true | false |
true | false | false |
true | true | true |
<2>逻辑或运算符(||)
运用:在选择一条执行路径时,需要确保;两个条件中有一个为真或两个都为真。
下表为(||)运算符的运算规则真值表
表达式1 | 表达式2 | 表达式1||表达式2 |
false | false | false |
false | true | true |
true | false | true |
true | true | true |
注意:逻辑与和逻辑或具有“简化计算”的特性。
例如,对下面的表达式求值时,
gender = = MALE && age >=65
如果gender不等于MALE(即整个表达式的值为false),应立即停止求值。如果gender等于MALE(即条件age >= 65为true,整个表达式的值仍然可能为true),则继续求值。逻辑与和逻辑或表达式的这种特性称为简化计算。
<3>布尔逻辑与(&)和布尔逻辑或(|)运算符
布尔逻辑与(&)和布尔逻辑或(|)运算符的工作方式同逻辑与(&&)和逻辑或(||)的工作方式。
但是,有个例外:布尔逻辑运算符总是计算两个操作数的值(即不采用简化计算)。
例如,下面表达式
gender == 1 & age >= 65
不论gender是否等于1,都要对age >= 65求值。
如果要使用布尔逻辑与和布尔逻辑或运算符右边的操作数的副作用——修改变量值,则这种求值方式就显得很有用。例如,下面表达式
birthday == true | ++ age >= 65
保证条件++ age >= 65会被求值。这样,无论整个表达式的值是true还是false,上面表达式中的变量age都会自动增1。但是,为了清晰起见,应尽量避免使用有副作用的表达式。
<4>布尔逻辑异或运算符(^)
一个包含布尔逻辑异或运算符(^)的条件,其值为true的前提是:当且仅当其中的一个操作数为true,另一个操作数为false。如果两个操作数同时为true或者同时为false,则整个条件为false。
表达式1 | 表达式2 | 表达式1^表达式2 |
false | false | false |
false | true | true |
true | false | true |
true | true | false |
<5>逻辑非运算符(!)
逻辑非运算符是一元运算符,只需要一个简单条件作操作数。逻辑非运算符(!)放在条件的前面,用于在原始条件(即不带逻辑非运算符的条件)为false时,选择一条路径。
下表给出了逻辑非运算符(!)的真值表,
表达式1 | !表达式 |
false | true |
true | false |
(6)各种运算符的优先级和结合性
运算符 | 结合性 | 类型 |
++ -- | 从右到左 | 一元后缀 |
++ -- + - ! (类型) | 从右到左 | 一元 |
* / % | 从左到右 | 乘法 |
+ - | 从左到右 | 加法 |
< <= > >= | 从左到右 | 关系 |
== != | 从左到右 | 等于 |
& | 从左到右 | 布尔逻辑与 |
^ | 从左到右 | 布尔逻辑异或 |
| | 从左到右 | 布尔逻辑或 |
&& | 从左到右 | 逻辑与 |
|| | 从左到右 | 逻辑或 |
?: | 从右到左 | 条件 |
= += -= *= /= %= | 从右到左 | 赋值 |