Java运算符详解:算术、关系、逻辑运算符
Java运算符详解:算术、关系、逻辑运算符
概述
运算符是用于对变量和值执行操作的特殊符号。Java提供了多种类型的运算符,每种都有其特定的用途。
1. 算术运算符
算术运算符用于执行基本的数学运算:
| 运算符 | 描述 | 示例 |
|---|---|---|
| + | 加法 | 5 + 3 = 8 |
| - | 减法 | 5 - 3 = 2 |
| * | 乘法 | 5 * 3 = 15 |
| / | 除法 | 5 / 3 = 1 |
| % | 取模(余数) | 5 % 3 = 2 |
| ++ | 自增 | i++ |
| -- | 自减 | i-- |
public class ArithmeticExample {
public static void main(String[] args) {
int a = 10;
int b = 3;
System.out.println("a + b = " + (a + b)); // 13
System.out.println("a - b = " + (a - b)); // 7
System.out.println("a * b = " + (a * b)); // 30
System.out.println("a / b = " + (a / b)); // 3
System.out.println("a % b = " + (a % b)); // 1
// 自增自减
int c = 5;
c++; // c = 6
System.out.println("c++ = " + c);
c--; // c = 5
System.out.println("c-- = " + c);
}
}
2. 关系运算符
关系运算符用于比较两个值:
| 运算符 | 描述 | 示例 |
|---|---|---|
| == | 等于 | 5 == 5 → true |
| != | 不等于 | 5 != 3 → true |
| > | 大于 | 5 > 3 → true |
| < | 小于 | 5 < 3 → false |
| >= | 大于等于 | 5 >= 5 → true |
| <= | 小于等于 | 5 <= 3 → false |
public class RelationalExample {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a == b: " + (a == b)); // false
System.out.println("a != b: " + (a != b)); // true
System.out.println("a > b: " + (a > b)); // false
System.out.println("a < b: " + (a < b)); // true
System.out.println("a >= b: " + (a >= b)); // false
System.out.println("a <= b: " + (a <= b)); // true
}
}
3. 逻辑运算符
逻辑运算符用于组合多个条件:
| 运算符 | 描述 | 示例 |
|---|---|---|
| && | 逻辑与 | (true && false) → false |
| || | 逻辑或 | (true || false) → true |
| ! | 逻辑非 | !true → false |
public class LogicalExample {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println("a && b: " + (a && b)); // false
System.out.println("a || b: " + (a || b)); // true
System.out.println("!a: " + (!a)); // false
System.out.println("!b: " + (!b)); // true
// 复合条件
int age = 25;
boolean hasID = true;
boolean canEnter = (age >= 18) && hasID;
System.out.println("Can enter: " + canEnter); // true
}
}
4. 位运算符
位运算符用于对二进制位进行操作:
| 运算符 | 描述 | 示例 |
|---|---|---|
| & | 按位与 | 5 & 3 = 1 |
| | | 按位或 | 5 | 3 = 7 |
| ^ | 按位异或 | 5 ^ 3 = 6 |
| ~ | 按位取反 | ~5 = -6 |
| << | 左移 | 5 << 1 = 10 |
| >> | 右移 | 5 >> 1 = 2 |
public class BitwiseExample {
public static void main(String[] args) {
int a = 5; // 二进制:101
int b = 3; // 二进制:011
System.out.println("a & b = " + (a & b)); // 1
System.out.println("a | b = " + (a | b)); // 7
System.out.println("a ^ b = " + (a ^ b)); // 6
System.out.println("~a = " + (~a)); // -6
System.out.println("a << 1 = " + (a << 1)); // 10
System.out.println("a >> 1 = " + (a >> 1)); // 2
}
}
5. 赋值运算符
赋值运算符用于为变量赋值:
| 运算符 | 描述 | 示例 |
|---|---|---|
| = | 赋值 | a = 5 |
| += | 加后赋值 | a += 5 等价于 a = a + 5 |
| -= | 减后赋值 | a -= 5 等价于 a = a - 5 |
| *= | 乘后赋值 | a *= 5 等价于 a = a * 5 |
| /= | 除后赋值 | a /= 5 等价于 a = a / 5 |
| %= | 取模后赋值 | a %= 5 等价于 a = a % 5 |
public class AssignmentExample {
public static void main(String[] args) {
int a = 10;
a += 5; // a = 15
System.out.println("a += 5: " + a);
a -= 3; // a = 12
System.out.println("a -= 3: " + a);
a *= 2; // a = 24
System.out.println("a *= 2: " + a);
a /= 4; // a = 6
System.out.println("a /= 4: " + a);
a %= 4; // a = 2
System.out.println("a %= 4: " + a);
}
}
6. 条件运算符(三元运算符)
条件运算符是if-else语句的简写形式:
public class TernaryExample {
public static void main(String[] args) {
int a = 10;
int b = 20;
// 条件运算符
int max = (a > b) ? a : b;
System.out.println("最大值: " + max); // 20
// 等价于
int max2;
if (a > b) {
max2 = a;
} else {
max2 = b;
}
}
}
运算符优先级
运算符的优先级决定了表达式的计算顺序:
- 括号
() - 一元运算符
++ -- ! ~ - 算术运算符
* / % + - - 移位运算符
<< >> >>> - 关系运算符
< > <= >= instanceof - 相等运算符
== != - 位运算符
& ^ | - 逻辑运算符
&& || - 条件运算符
? : - 赋值运算符
= += -= *= /= %=
public class PrecedenceExample {
public static void main(String[] args) {
int result = 10 + 2 * 3; // 先乘法后加法
System.out.println(result); // 16
int result2 = (10 + 2) * 3; // 先括号
System.out.println(result2); // 36
}
}
最佳实践
- 使用括号明确优先级:避免依赖运算符优先级,使用括号使表达式更清晰
- 避免复杂的复合表达式:将复杂表达式拆分为多个简单表达式
- 注意整数除法:整数除法会丢弃小数部分
- 使用自增自减运算符:在循环和计数器中使用自增自减运算符
总结
掌握Java运算符是编写有效Java程序的基础。每种运算符都有其特定的用途和语法规则。在实际编程中,要根据具体需求选择合适的运算符,并注意运算符的优先级和结合性。