运算符
算术运算符
java
public class ArithmeticDemo {
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 i = 10;
System.out.println("i++ = " + i++); // 10(后增)
System.out.println("i = " + i); // 11
int j = 10;
System.out.println("++j = " + ++j); // 11(前增)
System.out.println("j = " + j); // 11
}
}运算符列表
| 运算符 | 描述 | 示例 |
|---|---|---|
+ | 加法 | a + b |
- | 减法 | a - b |
* | 乘法 | a * b |
/ | 除法 | a / b |
% | 取余 | a % b |
++ | 自增 | a++、++a |
-- | 自减 | a--、--a |
整数除法注意
java
int a = 5;
int b = 2;
System.out.println(a / b); // 2(整数除法,舍去小数)
// 需要小数结果
System.out.println((double) a / b); // 2.5
System.out.println(5.0 / 2); // 2.5关系运算符
java
public class RelationDemo {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a == b); // 相等: false
System.out.println(a != b); // 不等: true
System.out.println(a < b); // 小于: true
System.out.println(a > b); // 大于: false
System.out.println(a <= b); // 小于等于: true
System.out.println(a >= b); // 大于等于: false
}
}运算符列表
| 运算符 | 描述 | 示例 |
|---|---|---|
== | 相等 | a == b |
!= | 不等 | a != b |
< | 小于 | a < b |
> | 大于 | a > b |
<= | 小于等于 | a <= b |
>= | 大于等于 | a >= b |
逻辑运算符
java
public class LogicDemo {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println(a && b); // 与: false
System.out.println(a || b); // 或: true
System.out.println(!a); // 非: false
// 短路运算
int x = 10;
boolean result = (x > 100) && (x++ > 5);
System.out.println(x); // 10(x++未执行)
result = (x > 5) || (x++ > 100);
System.out.println(x); // 10(x++未执行)
}
}运算符列表
| 运算符 | 描述 | 说明 |
|---|---|---|
&& | 短路与 | 两边都为true才为true,有短路效果 |
|| | 短路或 | 一边为true即为true,有短路效果 |
! | 逻辑非 | 取反 |
& | 逻辑与 | 无短路效果 |
| | 逻辑或 | 无短路效果 |
短路运算示例
java
String name = null;
// 短路运算避免空指针
if (name != null && name.length() > 0) {
System.out.println(name);
}位运算符
java
public class BitDemo {
public static void main(String[] args) {
int a = 60; // 二进制: 0011 1100
int b = 13; // 二进制: 0000 1101
System.out.println("a & b = " + (a & b)); // 按位与: 12
System.out.println("a | b = " + (a | b)); // 按位或: 61
System.out.println("a ^ b = " + (a ^ b)); // 按位异或: 49
System.out.println("~a = " + (~a)); // 按位取反: -61
System.out.println("a << 2 = " + (a << 2)); // 左移: 240
System.out.println("a >> 2 = " + (a >> 2)); // 右移: 15
System.out.println("a >>> 2 = " + (a >>> 2)); // 无符号右移: 15
}
}运算符列表
| 运算符 | 描述 | 示例 |
|---|---|---|
& | 按位与 | a & b |
| | 按位或 | a | b |
^ | 按位异或 | a ^ b |
~ | 按位取反 | ~a |
<< | 左移 | a << n |
>> | 右移 | a >> n |
>>> | 无符号右移 | a >>> n |
实用技巧
java
// 判断奇偶
boolean isOdd = (n & 1) == 1;
// 交换两个数
int a = 10, b = 20;
a = a ^ b;
b = a ^ b;
a = a ^ b;
// a = 20, b = 10
// 快速乘除2
int n = 10;
n = n << 1; // 乘2: 20
n = n >> 1; // 除2: 10赋值运算符
java
public class AssignDemo {
public static void main(String[] args) {
int a = 10;
a += 5; // a = a + 5 -> 15
a -= 3; // a = a - 3 -> 12
a *= 2; // a = a * 2 -> 24
a /= 4; // a = a / 4 -> 6
a %= 4; // a = a % 4 -> 2
a &= 3; // a = a & 3 -> 2
a |= 1; // a = a | 1 -> 3
a ^= 2; // a = a ^ 2 -> 1
a <<= 2; // a = a << 2 -> 4
a >>= 1; // a = a >> 1 -> 2
System.out.println(a);
}
}运算符列表
| 运算符 | 描述 | 等价于 |
|---|---|---|
= | 赋值 | a = b |
+= | 加后赋值 | a = a + b |
-= | 减后赋值 | a = a - b |
*= | 乘后赋值 | a = a * b |
/= | 除后赋值 | a = a / b |
%= | 取余后赋值 | a = a % b |
&= | 按位与后赋值 | a = a & b |
|= | 按位或后赋值 | a = a | b |
^= | 按位异或后赋值 | a = a ^ b |
<<= | 左移后赋值 | a = a << b |
>>= | 右移后赋值 | a = a >> b |
三元运算符
java
public class TernaryDemo {
public static void main(String[] args) {
int age = 20;
// 条件 ? 真值 : 假值
String status = age >= 18 ? "成年" : "未成年";
System.out.println(status); // 成年
// 嵌套使用
int score = 85;
String grade = score >= 90 ? "优秀" :
score >= 80 ? "良好" :
score >= 60 ? "及格" : "不及格";
System.out.println(grade); // 良好
// 避免空指针
String name = null;
String displayName = name != null ? name : "匿名";
System.out.println(displayName); // 匿名
}
}运算符优先级
从高到低:
| 优先级 | 运算符 |
|---|---|
| 1 | ()、[]、. |
| 2 | !、~、++、-- |
| 3 | *、/、% |
| 4 | +、- |
| 5 | <<、>>、>>> |
| 6 | <、<=、>、>=、instanceof |
| 7 | ==、!= |
| 8 | & |
| 9 | ^ |
| 10 | | |
| 11 | && |
| 12 | || |
| 13 | ?: |
| 14 | =、+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=、>>>= |
建议
使用括号 () 明确优先级,使代码更易读。
java
// 不推荐
boolean result = a > b && c < d || e == f;
// 推荐
boolean result = (a > b && c < d) || (e == f);