java中基本类型用==比较值安全高效,包装类应优先用equals()避免引用比较陷阱;混合比较需防null,推荐objects.equals()。

Java 中基本类型与包装类比较数值是否相等,关键在于避免用 == 判断包装类对象是否“值相等”,而应优先使用 equals() 或先拆箱再用 ==(需注意 null 安全)。
基本类型之间用 == 安全且推荐
基本类型(如 int、double)没有对象身份,只有值。因此直接用 == 比较是正确、高效的方式:
int a = 100; int b = 100; System.out.println(a == b); // true —— 比较的是数值本身
包装类之间慎用 ==,优先用 equals()
Integer、Double 等是对象,== 比较的是引用是否指向同一对象,不是值是否相等。虽然小整数(-128 ~ 127)有缓存,可能碰巧为 true,但不可靠:
Integer x = 100; Integer y = 100; System.out.println(x == y); // true(因 Integer 缓存) Integer m = 200; Integer n = 200; System.out.println(m == n); // false(超出缓存范围,新建对象)
所以统一用 equals() 才安全:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
Integer、Long、Short、Byte的equals()会先判断是否为同类型,再比较数值 -
Double和Float的equals()能正确处理NaN(NaN == NaN为 false,但Double.equals(NaN, NaN)为 true)
基本类型与包装类混合比较:自动拆箱 + ==(但要防 null)
当一边是基本类型、一边是包装类时,Java 会自动将包装类拆箱(如 Integer → int),然后用 == 比较数值:
int a = 100; Integer b = 100; System.out.println(a == b); // true —— b 自动拆箱为 int
⚠️ 风险点:如果包装类变量为 null,拆箱会抛 NullPointerException:
Integer c = null; System.out.println(a == c); // 抛出 NullPointerException
安全写法有两种:
- 显式判空后拆箱:
c != null && a == c.intValue() - 用
Objects.equals(a, c)(JDK 7+)——它对基本类型参数会自动装箱,对 null 安全
推荐的统一做法
- 纯基本类型:直接用
== - 纯包装类:一律用
.equals() - 混合比较:优先转成包装类用
Objects.equals(),或手动判空拆箱 - 需要数值计算或判等逻辑复杂时,可考虑统一转为基本类型(确保非 null)再比
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










