包装类是引用类型,== 比较地址而非值;缓存机制(-128~127)导致 == 偶然为 true,但不可靠;判断值相等必须用 equals(),且需重写 hashcode() 以保障集合正确性。

包装类是引用类型,== 比的是地址不是值
Integer、Long、Boolean 等包装类本质是对象,存的是堆内存中的引用地址。== 运算符对所有引用类型都只比较地址是否相同,哪怕两个 Integer 都封装了数值 1000,只要它们是不同对象,== 就返回 false。这和“判断值是否相等”的业务目标完全脱节。
缓存机制制造了 == 偶然有效的假象
Integer 在 -128 到 127 范围内会复用缓存对象,所以:
-
Integer a = 100; Integer b = 100;→a == b为 true(地址相同) -
Integer c = 200; Integer d = 200;→c == d为 false(各自新建对象,地址不同)
这种不一致行为极易引发线上 bug。靠记忆缓存范围来决定用 == 还是 equals,既不可靠也不可维护。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
equals 是专为“值相等”设计的契约
所有整型包装类都重写了 equals() 方法,内部逻辑就是解包后比数值:
-
new Integer(200).equals(new Integer(200))→ true -
Integer.valueOf(500).equals(Integer.valueOf(500))→ true - 即使传入 null,
obj.equals(null)返回 false(符合规范),而obj == null才是安全判空方式
不重写 equals 就无法满足集合容器要求
HashMap、HashSet 等集合依赖 equals() 和 hashCode() 协同工作。如果用 == 判断相等性,两个内容相同的包装类对象会被视为不同键,导致重复插入、查不到值等严重问题。Java 规范明确要求:重写 equals() 必须同时重写 hashCode(),这是保障集合正确性的底层基础。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










