1. 方法定义
public int hashCode()
- 返回值:布尔值对应的哈希码(
true
返回1231
,false
返回1237
)。 - 所属类:
java.lang.Boolean
2. 功能说明
- 根据布尔值计算并返回固定哈希码:
true
→ 1231false
→ 1237
- 设计目的:确保布尔值在哈希表(如
HashMap
、HashSet
)中高效存储和检索。
3. 示例代码
public class BooleanHashCodeExample {
public static void main(String[] args) {
Boolean boolTrue = true;
Boolean boolFalse = false;
System.out.println("HashCode for true: " + boolTrue.hashCode()); // 输出 1231
System.out.println("HashCode for false: " + boolFalse.hashCode()); // 输出 1237
// 在HashMap中使用
java.util.Map<Boolean, String> map = new java.util.HashMap<>();
map.put(true, "Yes");
map.put(false, "No");
System.out.println(map.get(true)); // 输出 "Yes"
System.out.println(map.get(false)); // 输出 "No"
}
}
4. 使用技巧
- 直接使用原始布尔值:
无需创建
Boolean
对象,直接用boolean
参与运算更高效:boolean flag = true; int hash = Boolean.hashCode(flag); // 静态方法调用(Java 1.8+)
- 快速哈希计算:
手动实现等价逻辑(适用于高频调用场景):
int hash = value ? 1231 : 1237;
5. 常见错误
混淆
Boolean
与boolean
:Boolean obj = null; obj.hashCode(); // 抛出 NullPointerException
解决:使用前判空或改用原始类型
boolean
。误用
==
比较哈希码: 哈希码相同不代表对象相等:Boolean a = true; Integer b = 1231; a.hashCode() == b.hashCode(); // true,但类型不同!
6. 注意事项
- 不可变性:
Boolean
是 immutable 类,哈希码在对象创建后固定。 - 哈希冲突:设计哈希算法时需考虑其他字段,避免依赖单一布尔字段。
- 自动装箱:频繁装箱/拆箱可能影响性能(如循环中大量使用
Boolean
对象)。
7. 最佳实践与性能优化
- 优先使用原始类型:
减少对象创建开销:
// 推荐:使用 boolean 而非 Boolean boolean isValid = true;
- 静态方法替代实例调用(Java 8+):
Boolean.hashCode(true); // 直接调用静态方法,避免对象创建
- 避免哈希码依赖单一布尔字段:
复合对象的哈希码应结合所有关键字段:
@Override public int hashCode() { int result = booleanField ? 1231 : 1237; result = 31 * result + intField; // 结合其他字段 return result; }
8. 总结
关键点 | 说明 |
---|---|
固定返回值 | true=1231 , false=1237 |
设计目的 | 支持布尔值在哈希集合中的高效存储 |
性能优化 | 使用原始类型 boolean + 静态方法 Boolean.hashCode() |
空指针风险 | 操作 Boolean 对象前需判空 |
复合对象哈希码 | 结合所有关键字段计算 |