为什么不同布尔实例的哈希代码总是相同的?

2022-09-01 07:03:28

在下面的代码中,哈希代码始终相同。为什么会这样?

法典:

public class BooleanClass {

    public static void main(String[] args) {
        Boolean b1 = new Boolean(true);
        Boolean b2 = new Boolean(false);
        Boolean b3 = new Boolean(true);
        Boolean b4 = new Boolean(false);
        Boolean b5 = new Boolean(false);
        Boolean b6 = new Boolean(true);

        System.out.println(b1.hashCode());
        System.out.println(b2.hashCode());
        System.out.println(b3.hashCode());
        System.out.println(b4.hashCode());
        System.out.println(b5.hashCode());
        System.out.println(b6.hashCode());
    }
}

输出:

1231
1237
1231
1237
1237
1231

始终使用相同的数字并打印出来。任何原因?12311237


答案 1

方法的JavaDoc说:Boolean.hashCode()

如果此对象表示 ;如果此对象表示 ,则返回整数。1231true1237false


答案 2

hashCode() 的合约是:

如果根据方法,两个对象相等,则在两个对象中的每个对象上调用该方法必须产生相同的整数结果。equals(Object)hashCode()

虽然布尔值只有两个值,并且 ,但您只能得到两个不同的哈希代码。truefalse