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 定义位运算符,可应用于 long、int、short、char、byte 等整数类型。位运算符按位操作。假设 a=60,b=13,二制格式:
a = 0011 1100 b = 0000 1101 ----------------- a&b = 0000 1100 a|b = 0011 1101 a^b = 0011 0001 ~a = 1100 0011
位运算符列表(假设 A=60,B=13):
| 运算符 | 描述 | 示例 |
|---|---|---|
| & (按位与) | 二进制 AND:位在两操作数中都存在则复制到结果 | (A & B) 得 12 (0000 1100) |
| | (按位或) | 二进制 OR:位在任一操作数存在则复制 | (A | B) 得 61 (0011 1101) |
| ^ (按位异或) | 二进制 XOR:位在一操作数设置但不在两者中则复制 | (A ^ B) 得 49 (0011 0001) |
| ~ (按位取反) | 二进制一补数:一元运算符,翻转位 | (~A) 得 -61 (1100 0011,补码形式) |
| << (左移) | 左操作数值左移右操作数指定位数 | A << 2 得 240 (1111 0000) |
| >> (右移) | 左操作数值右移右操作数指定位数 | A >> 2 得 15 (1111) |
| >>> (无符号右移) | 右移并用零填充 | A >>>2 得 15 (0000 1111) |
逻辑运算符
假设布尔变量 A=true,B=false:
| 运算符 | 描述 | 示例 |
|---|---|---|
| && (逻辑与) | 逻辑 AND:两操作数均非零则条件为真 | (A && B) 为 false |
| || (逻辑或) | 逻辑 OR:任一操作数非零则条件为真 | (A || B) 为 true |
| ! (逻辑非) | 逻辑 NOT:反转操作数逻辑状态。条件为真则变假 | !(A && B) 为 true |
赋值运算符
| 运算符 | 描述 | 示例 |
|---|---|---|
| = | 简单赋值:将右操作数值赋给左操作数 | 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 |
| |= | 按位或且赋值 | C |= 2 等价于 C = C | 2 |
其他运算符
条件运算符 ( ? : )
条件运算符即 三元运算符。包含三个操作数,用于评估布尔表达式。目标是决定变量赋何值。写法:
variable x = (expression) ? value if true : value if false
示例:
Live Demopublic class Test {
public static void main(String args[]) {
int a, b;
a = 10;
b = (a == 1) ? 20: 30;
System.out.println( "Value of b is : " + b );
b = (a == 10) ? 20: 30;
System.out.println( "Value of b is : " + b );
}
}
输出:
Value of b is : 30 Value of b is : 20
instanceof 运算符
仅用于对象引用变量。检查对象是否为特定类型(类或接口类型)。写法:
(Object reference variable) instanceof (class/interface type)
若左侧变量引用的对象通过右侧类/接口类型的 IS-A 检查,结果为 true。示例:
Live Demopublic class Test {
public static void main(String args[]) {
String name = "James";
boolean result = name instanceof String;
System.out.println( result );
}
}
输出:
true
若被比较对象与右侧类型赋值兼容,仍返回 true。另例:
Live Democlass Vehicle {}
public class Car extends Vehicle {
public static void main(String args[]) {
Vehicle a = new Car();
boolean result = a instanceof Car;
System.out.println( result );
}
}
输出:
true
Java 运算符优先级
运算符优先级决定表达式中项的分组,影响求值顺序。某些运算符优先级更高,如乘法高于加法。
例:x = 7 + 3 * 2;x 赋值为 13 而非 20,因 * 优先于 +,先算 3*2 再加 7。
下表优先级从高到低。表达式中高优先级运算符优先求值。
| 类别 | 运算符 | 结合性 |
|---|---|---|
| 后缀 | expression++ expression-- | 左到右 |
| 一元 | ++expression –-expression +expression –expression ~ ! | 右到左 |
| 乘性 | * / % | 左到右 |
| 加性 | + - | 左到右 |
| 移位 | << >> >>> | 左到右 |
| 关系 | < > <= >= instanceof | 左到右 |
| 相等 | == != | 左到右 |
| 按位与 | & | 左到右 |
| 按位异或 | ^ | 左到右 |
| 按位或 | | | 左到右 |
| 逻辑与 | && | 左到右 |
| 逻辑或 | || | 左到右 |
| 条件 | ?: | 右到左 |
| 赋值 | = += -= *= /= %= ^= |= <<= >>= >>>= | 右到左 |
下一步
下章将讲解 Java 循环控制。描述各种循环类型及其在程序开发中的用途。
java
- 精通 Java 运算符:类型、语法与实战示例
- 精通 Java 输入输出:打印、读取与格式化数据
- Java 注释:类型、用法与最佳实践
- 精通 Java 增强 for 循环:语法、示例与最佳实践
- 精通 Java 字符串:创建、方法与最佳实践
- 精通 Java 接口:概念、实现与最佳实践
- 精通 Java 匿名内部类:定义、语法与实战示例
- 精通 Java Try-With-Resources:自动资源管理详解
- Java 注解详解:类型、放置位置与实战示例
- Java 断言实战指南:尽早发现 Bug 与保障代码可靠性
- 深入理解 Java Vector:用法、特性及与 ArrayList 的对比
- Java 基础:掌握基本语法