integer 的 equals() 先检查类型和 null,再用 == 比较 int 值;hashcode() 直接返回该 int 值,因不可变且单字段,故安全高效、零开销、天然满足契约。

Integer 类的 equals() 和 hashCode() 是 JDK 中标准且规范的实现,完全遵循 Java 的契约要求:相等的对象必须有相同的哈希码,且哈希码需与值一致、稳定、高效。
equals() 的实现逻辑
Integer 的 equals() 方法不是简单比较引用,而是先做类型和 null 检查,再比较封装的 int 值:
- 如果传入对象为
null,直接返回false - 如果传入对象不是
Integer类型(比如是Long或自定义类),返回false - 否则,将参数强转为
Integer,并用==比较其内部的value字段(int类型,无装箱开销)
源码精简示意:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).value;
}
return false;
}
hashCode() 的实现方式
Integer 的 hashCode() 实现极其简洁——直接返回其封装的 int 值本身:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 因为
int是 32 位基本类型,它天然就是一个高质量、无冲突、确定性的哈希值 - 例如:
new Integer(42).hashCode()就是42;Integer.valueOf(-100).hashCode()就是-100 - 这完全满足契约:只要两个 Integer 对象
equals()返回true,它们的value必然相同,因此hashCode()也必然相同
源码即:
public int hashCode() {
return value;
}
为什么这样设计既安全又高效
Integer 是不可变(immutable)的包装类,且只封装一个 int 字段。这种单一数值语义决定了:
- 值相等 ⇔ 对象逻辑相等,无需多字段组合或空值防护
- int 值自身就是最佳哈希码:无计算开销、零哈希冲突(对同一值而言)、内存友好
- 自动兼容缓存机制(如
Integer.valueOf()在 [-128, 127] 范围内复用实例),此时==、equals()、hashCode()三者行为天然一致
对比自定义类的关键差异
不同于需要手动处理 null、多字段、继承关系的业务类(如 Person),Integer 的重写不涉及:
- 字段判空(
value是基本类型,不可能为 null) - Objects.equals() 或 Objects.hash() 工具调用(无必要)
- getClass() vs instanceof 权衡(类型检查用
instanceof即可,且安全)
它的实现是“极简主义”的典范:用最直接的方式,满足最严格的契约。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










