Java 运算符终极指南(看看下面的小陷阱)

以下是 Java 运算符终极指南,包含 全类别详解 + 实战应用陷阱,助您深入掌握运算逻辑:


一、运算符分类速览

类型运算符示例核心用途优先级顺序参考
算术运算符+ - * / % ++ --数值计算中等
关系运算符> < >= <= == !=条件判断较低
逻辑运算符&& || !布尔逻辑控制中等
位运算符& | ^ ~ << >> >>>二进制位操作较低
赋值运算符= += -= *= /= %= ...变量赋值与快捷操作最低
条件运算符? :简化if-else结构特殊
类型检查符instanceof对象类型验证特殊
杂项-> ::(Lambda相关)函数式操作--

二、运算符深度解析

1. 算术运算符
 

<JAVA>

int a = 10 / 3;      // 结果为3(整数除法截断)
double b = 10 / 3.0; // 3.333...
int c = -10 % 3;     // -1(符号跟随被除数) 

// 前缀与后缀自增
int x = 5;
int y = x++;        // y=5, x=6(后增)
int z = ++x;        // z=7, x=7(先增)

陷阱

  • 整数除法的截断误差(如 5 / 2 = 2
  • += 包含隐式类型转换:byte b=1; b += 2; ✔️ 但 b = b + 2; ❌(类型提升为int)

2. 关系运算符
 

<JAVA>

"hello" == "hello"          // true(字符串字面量缓存)
new String("hi") == new String("hi")   // false(对象地址不同)
"HI".equalsIgnoreCase("hi") // true(内容匹配推荐方式)

关键区别

  • == 比较基本类型值或对象引用地址
  • .equals() 比较对象内容(需重写,默认同==)

3. 逻辑与位运算符
类型运算符特点示例
逻辑与&&短路求值(左false跳过右)(a > 0) && (b/a > 1)
逻辑或||短路求值(左true跳过右)(str == null) || str.isEmpty()
位与&必须计算两侧flags & MASK
异或^位不同为1,同为0a ^ b 交换变量的无临法
无符号右移>>>高位填0(负数变正)-8 >>> 1 = 2147483644

技巧

  • a ^= b; b ^= a; a ^= b; → 无需临时变量交换数值
  • (num & 1) == 0 → 快速判断偶数

4. 赋值运算符
 

<JAVA>

int[] arr = {1,2};
arr[0] ^= arr[1]; // arr[0] = 1 ^ 2 = 3
arr[1] ^= arr[0]; // arr[1] = 2 ^ 3 = 1
arr[0] ^= arr[1]; // arr[0] = 3 ^ 1 = 2 → 交换完成

注意

  • x += y 等价于 x = (T)(x + y)(自动强制转换,T为x的原类型)
  • 复合操作不会自动提升变量类型:short s=5; s = s + 2; 报错 → 必须用 s += 2;

5. 运算符优先级全表
优先级运算符结合方向
1() . new []左→右
2! ~ ++ -- +(正) -(负) (类型)右→左
3* / %左→右
4+ -左→右
5<< >> >>>左→右
6< <= > >= instanceof左→右
7== !=左→右
8&左→右
9^左→右
10|左→右
11&&左→右
12||左→右
13?:右→左
14= += -= *= /= 赋值类右→左

记忆口诀单目运算乘除模,加减移位比等于,位逻条赋右到左


三、鲜为人知的高级用法

1. 布尔型不可逆运算
 

<JAVA>

boolean active = true;
active &= (status > 0); // 等价于 active = active & (status>0)
2. 位操作高效存储
 

<JAVA>

// 使用int存储32个开关状态(每位代表一个开关)
int flags = 0;
flags |= 0b1 << 3;      // 打开第3位开关
boolean isOn = (flags & (0b1 << 3)) != 0; // 检查第3位

四、高频陷阱警示

  1. 浮点数比较

     

    <JAVA>

    double d1 = 0.1 + 0.2;
    double d2 = 0.3;
    System.out.println(d1 == d2); // false → 应使用误差范围判断
    
  2. 逻辑运算符短路屏蔽副作用

     

    <JAVA>

    int i = 0;
    if (false && (i++ > 0)) {} → i仍为0(因右侧未执行)
    
  3. null instanceof

     

    <JAVA>

    String s = null;
    System.out.println(s instanceof String); // false(无NullPointerException)
    

通过系统性掌握这些运算符规则,您将能有效规避代码中的隐藏Bug,并编写出更高效的Java程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值