Java中用包装类equals比较数值,必须确保两对象非null且类型一致,否则返回false或抛异常;推荐用Objects.equals或先判空,避免空指针和类型不匹配问题。

Java 中用包装类对象的 equals 方法比较数值,关键在于:**必须确保两个对象都不为 null,且类型一致(或满足自动拆箱兼容规则),否则可能返回 false 或抛出异常。**
注意 null 值,避免空指针异常
包装类对象可能为 null,直接调用 equals 会抛出 NullPointerException。
- 推荐写法:用常量或已知非 null 对象调用
equals,例如Integer.valueOf(5).equals(obj) - 更安全写法:先判空再比较,或使用
Objects.equals(a, b)(它内部已处理 null) - 错误示例:
obj1.equals(obj2),当obj1为null时直接崩溃
类型不匹配时 equals 返回 false,不会自动类型转换
Integer.equals(Object) 只有在参数是 Integer 类型时才比较数值;传入 Long、String 或基本类型(如 int)都会返回 false。
-
Integer.valueOf(10).equals(Long.valueOf(10))→false -
Integer.valueOf(10).equals(10)→true(因为10是int字面量,编译器会自动装箱为Integer) -
Integer.valueOf(10).equals("10")→false(类型不同,不尝试解析字符串)
推荐替代方案:优先用 Objects.equals 或直接比较基本值
若目标是判断数值是否相等,而非对象身份,以下方式更稳妥:
立即学习“Java免费学习笔记(深入)”;
- 用
Objects.equals(a, b):安全、简洁、自动处理 null 和类型差异(仍要求同类型才比数值) - 显式拆箱后比较:
a != null && b != null && a.intValue() == b.intValue() - 若确定非 null,也可用
==比较,但仅限于 -128 到 127 范围内缓存的Integer等(不推荐依赖此行为)
小结:equals 的本质是“同类型数值相等”
Integer.equals() 不是通用的“数值相等判断工具”,它只对同包装类型有效,且语义是「两个包装对象表示相同的数值」。跨类型比较需手动转换或改用其他逻辑。


















