Java 中的运算符是用来对变量和值执行各种操作的符号。使用这些运算符可以执行诸如加法、减法、比较大小等操作。
Java 支持多种类型的运算符,下面列出了主要的几种类型:
Java 算术运算符
算术运算符用于数学表达式中,其用法类似于代数中的用法。假设整型变量 A 的值为 10,变量 B 的值为 20,则:
运算符 |
描述 |
示例 |
+ (加法) |
将两边的操作数相加 |
A + B 将得到 30 |
- (减法) |
从左边的操作数中减去右边的操作数 |
A - B 将得到 -10 |
* (乘法) |
将两边的操作数相乘 |
A * B 将得到 200 |
/ (除法) |
将左边的操作数除以右边的操作数 |
B / A 将得到 2 |
% (取模) |
将左边的操作数除以右边的操作数并返回余数 |
B % A 将得到 0 |
++ (递增) |
将操作数的值增加 1 |
B++ 将得到 21 |
-- (递减) |
将操作数的值减少 1 |
B-- 将得到 19 |
Java 关系运算符
关系运算符用于比较两个操作数的值。假设变量 A 的值为 10,变量 B 的值为 20,则:
运算符 |
描述 |
示例 |
== (等于) |
检查两个操作数的值是否相等,如果相等则条件为真 |
(A == B) 不为真 |
!= (不等于) |
检查两个操作数的值是否不相等,如果不相等则条件为真 |
(A != B) 为真 |
> (大于) |
检查左边的操作数的值是否大于右边的操作数的值,如果是则条件为真 |
(A > B) 不为真 |
< (小于) |
检查左边的操作数的值是否小于右边的操作数的值,如果是则条件为真 |
(A < B) 为真 |
>= (大于等于) |
检查左边的操作数的值是否大于等于右边的操作数的值,如果是则条件为真 |
(A >= B) 不为真 |
<= (小于等于) |
检查左边的操作数的值是否小于等于右边的操作数的值,如果是则条件为真 |
(A <= B) 为真 |
Java 位运算符
Java 定义了几种位运算符,可以应用于整型类型(long、int、short、char 和 byte)。
运算符 |
描述 |
示例 |
& (按位与) |
如果两个操作数都包含该位,则复制该位到结果中 |
(A & B) 将得到 12 (即 0000 1100) |
|
(按位或) |
如果任何一个操作数包含该位,则复制该位到结果中 |
^ (按位异或) |
如果只有一个操作数包含该位,则复制该位到结果中 |
(A ^ B) 将得到 49 (即 0011 0001) |
~ (按位取反) |
二进制取反运算符是单目运算符,具有“翻转”位的效果 |
(~A) 将得到 -61 (即 1100 0011),因为这是带符号的二进制数的二进制补码形式 |
<< (左移) |
左移运算符。左边操作数的值根据右边操作数指定的位数向左移动 |
A << 2 将得到 240 (即 1111 0000) |
>> (右移) |
右移运算符。左边操作数的值根据右边操作数指定的位数向右移动 |
A >> 2 将得到 15 (即 1111) |
>>> (无符号右移) |
右移零填充运算符。左边操作数的值根据右边操作数指定的位数向右移动,并且移动的值被零填充 |
A >>> 2 将得到 15 (即 0000 1111) |
Java 逻辑运算符
运算符 |
描述 |
示例 |
&& (逻辑与) |
如果两个操作数都是非零的,则条件为真 |
(A && B) 是假 |
|
|
(逻辑或) |
! (逻辑非) |
逻辑非运算符反转其操作数的逻辑状态。如果一个条件为真,则逻辑非运算符将使其为假 |
!(A && B) 是真 |
Java 赋值运算符
运算符 |
描述 |
示例 |
= |
简单赋值运算符。将右侧操作数的值赋给左侧操作数 |
C = A + B 将把 A + B 的值赋给 C |
+= |
加法赋值运算符。将右侧操作数加到左侧操作数上并将结果赋给左侧操作数 |
C += A 等价于 C = C + A |
-= |
减法赋值运算符。从左侧操作数中减去右侧操作数并将结果赋给左侧操作数 |
C -= A 等价于 C = C - A |
*= |
乘法赋值运算符。将右侧操作数乘以左侧操作数并将结果赋给左侧操作数 |
C *= A 等价于 C = C * A |
/= |
除法赋值运算符。将左侧操作数除以右侧操作数并将结果赋给左侧操作数 |
C /= A 等价于 C = C / A |
%= |
取模赋值运算符。使用两个操作数取模并将结果赋给左侧操作数 |
C %= A 等价于 C = C % A |
<<= |
左移赋值运算符 |
C <<= 2 等价于 C = C << 2 |
>>= |
右移赋值运算符 |
C >>= 2 等价于 C = C >> 2 |
&= |
按位与赋值运算符 |
C &= 2 等价于 C = C & 2 |
^= |
按位异或赋值运算符 |
C ^= 2 等价于 C = C ^ 2 |
|
= |
按位或赋值运算符 |
Java 其他运算符
条件运算符(三元运算符)
条件运算符也被称为三元运算符。此运算符由三个操作数组成,用于评估布尔表达式。它的目标是决定应该给变量赋什么值。运算符的写法如下:
variable x = (expression) ? value if true : value if false;
instanceof 运算符
这个运算符只用于对象引用变量。运算符检查对象是否是特定类型(类类型或接口类型)。instanceof 运算符的写法如下:
( Object reference variable ) instanceof (class/interface type)
如果变量左侧的对象通过了右侧类/接口类型的 IS-A 测试,则结果为 true。
Java 运算符优先级与结合性
运算符优先级决定了表达式中项的组合方式。这影响了表达式的求值顺序。某些运算符的优先级高于其他运算符;例如,乘法运算符的优先级高于加法运算符。
在下表中,优先级最高的运算符位于表的顶部,优先级最低的位于底部。在一个表达式中,优先级较高的运算符将首先被评估。
类别 |
运算符 |
结合性 |
后缀 |
expression++ expression-- |
自左向右 |
单目 |
++expression --expression +expression -expression ~ ! |
自右向左 |
乘法 |
* / % |
自左向右 |
加法 |
+ - |
自左向右 |
移位 |
<< >> >>> |
自左向右 |
关系 |
< > <= >= instanceof |
自左向右 |
等值 |
== != |
自左向右 |
按位与 |
& |
自左向右 |
按位异或 |
^ |
自左向右 |
按位或 |
|
|
逻辑与 |
&& |
自左向右 |
逻辑或 |
|
|
条件 |
?: |
自右向左 |
赋值 |
= += -= *= /= %= ^= |
= <<= >>= >>>= |