1. 方法定义

public int hashCode()
  • 返回值:布尔值对应的哈希码(true 返回 1231false 返回 1237)。
  • 所属类java.lang.Boolean

2. 功能说明

  • 根据布尔值计算并返回固定哈希码:
    • true1231
    • false1237
  • 设计目的:确保布尔值在哈希表(如 HashMapHashSet)中高效存储和检索。

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. 使用技巧

  1. 直接使用原始布尔值: 无需创建 Boolean 对象,直接用 boolean 参与运算更高效:
    boolean flag = true;
    int hash = Boolean.hashCode(flag); // 静态方法调用(Java 1.8+)
    
  2. 快速哈希计算: 手动实现等价逻辑(适用于高频调用场景):
    int hash = value ? 1231 : 1237;
    

5. 常见错误

  1. 混淆 Booleanboolean

    Boolean obj = null;
    obj.hashCode(); // 抛出 NullPointerException
    

    解决:使用前判空或改用原始类型 boolean

  2. 误用 == 比较哈希码: 哈希码相同不代表对象相等:

    Boolean a = true;
    Integer b = 1231;
    a.hashCode() == b.hashCode(); // true,但类型不同!
    

6. 注意事项

  • 不可变性Boolean 是 immutable 类,哈希码在对象创建后固定。
  • 哈希冲突:设计哈希算法时需考虑其他字段,避免依赖单一布尔字段。
  • 自动装箱:频繁装箱/拆箱可能影响性能(如循环中大量使用 Boolean 对象)。

7. 最佳实践与性能优化

  1. 优先使用原始类型: 减少对象创建开销:
    // 推荐:使用 boolean 而非 Boolean
    boolean isValid = true;
    
  2. 静态方法替代实例调用(Java 8+):
    Boolean.hashCode(true); // 直接调用静态方法,避免对象创建
    
  3. 避免哈希码依赖单一布尔字段: 复合对象的哈希码应结合所有关键字段:
    @Override
    public int hashCode() {
        int result = booleanField ? 1231 : 1237;
        result = 31 * result + intField; // 结合其他字段
        return result;
    }
    

8. 总结

关键点 说明
固定返回值 true=1231, false=1237
设计目的 支持布尔值在哈希集合中的高效存储
性能优化 使用原始类型 boolean + 静态方法 Boolean.hashCode()
空指针风险 操作 Boolean 对象前需判空
复合对象哈希码 结合所有关键字段计算