Java运算符终极指南:从基础算术到位运算实战
基础算术运算符的陷阱
java
int a = 5 / 2; // 结果=2(整数地板除)
double c = 5.0 / 2; // 结果=2.5(自动类型提升)
System.out.println(9 % 5); // 4(取余运算)
System.out.println(-9 % 5); // -4(保留符号)
// 正确判断奇偶(考虑负数情况)
public static boolean isOdd(int number) {
return number % 2 != 0; // 避免使用==1
}
关键点:
- 整数除法会截断小数部分(地板除)
- 取余运算结果符号与被除数相同
- 类型提升规则:运算结果自动提升为最高精度类型
自增运算符的底层机制
a += 1
实际执行三步操作:
- 从内存读取a的值到CPU寄存器
- CPU执行+1运算
- 将结果写回内存
java
int x = 5;
int y = x++; // y=5, x=6(先赋值后自增)
int z = ++x; // z=7, x=7(先自增后赋值)
逻辑运算符的短路特性
java
// 避免空指针的典型用法
Boolean config = getConfig(); // 可能返回null
if(config != null && config) {
// 当config为null时,后半部分不会执行
System.out.println("配置开启");
}
短路规则:
&&
:左操作数为false时跳过右侧计算||
:左操作数为true时跳过右侧计算- 三元运算符
?:
应避免嵌套以保证可读性
位运算核心原理
1. 补码:负数的二进制表示

- 正数:原码=反码=补码
- 负数:补码=反码+1(符号位固定为1)
- 优势:统一加减法运算逻辑
2. 位运算实战
运算 | 示例 | 特点 |
---|---|---|
按位与(&) | 6 & 3 = 2 | 清零特定位 |
按位或(|) | 6 | 3 = 7 | 设置特定位 |
异或(^) | 6 ^ 3 = 5 | 不进位加法(X^X=0) |
左移(<<) | 8 << 1 = 16 | 等效×2(低位补0) |
带符号右移(>>) | -8 >> 1 = -4 | 高位补符号位 |
无符号右移(>>>) | -8 >>> 1 = 2147483644 | 高位补0 |

位运算的工程应用:属性压缩存储
传统方案:32个布尔属性需要32个boolean(约32字节)
java
boolean isPublic;
boolean isProtected;
boolean isPrivate;
// ...共32个属性
位运算优化:用单个int(4字节)存储32个属性
java
int modifiers = 0;
// 设置PUBLIC标志位(按位或)
modifiers |= 0x0001;
// 检查PROTECTED标志位(按位与)
boolean isProtected = (modifiers & 0x0002) != 0;

JDK实战案例 :java.lang.reflect.Modifier
类
java
public static final int PUBLIC = 0x00000001;
public static final int PRIVATE = 0x00000002;
public static final int PROTECTED = 0x00000004;
// 检查修饰符
public static boolean isPublic(int mod) {
return (mod & PUBLIC) != 0;
}
字符串连接优化
java
String result = "值=" + 10; // 自动调用Integer.toString(10)
// 实际编译为:
StringBuilder sb = new StringBuilder();
sb.append("值=");
sb.append(10);
String result = sb.toString();
- 连续
+
操作会被编译器优化为StringBuilder - 循环中拼接字符串仍需手动使用StringBuilder