Java 如何计算空对象的哈希代码

Java 如何计算空对象的哈希代码,java,Java,由于HashMap和HashSet允许空对象,这些“空”对象的哈希值是多少?它在java中是如何计算/处理的?内置于openJDK中的HashMap只是将空引用放入数组中用于保存条目的第一个bucket中 409 private V putForNullKey(V value) { 410 for (Entry<K,V> e = table[0]; e != null; e = e.next) { 411 if (e.key == nu

由于HashMap和HashSet允许空对象,这些“空”对象的哈希值是多少?它在java中是如何计算/处理的?

内置于openJDK中的HashMap只是将空引用放入数组中用于保存条目的第一个bucket中

409     private V putForNullKey(V value) {
410         for (Entry<K,V> e = table[0]; e != null; e = e.next) {
411             if (e.key == null) {
412                 V oldValue = e.value;
413                 e.value = value;
414                 e.recordAccess(this);
415                 return oldValue;
416             }
417         }
418         modCount++;
419         addEntry(0, null, value, 0);
420         return null;
421     }
409私有V putForNullKey(V值){
410 for(条目e=表[0];e!=null;e=e.next){
411如果(e.key==null){
412 V旧值=e.值;
413 e.价值=价值;
414 e.记录访问(本);
415返回旧值;
416             }
417         }
418 modCount++;
419加法(0,null,value,0);
420返回空值;
421     }

例如,对于
HashMap
,它只是一个特例。请参阅下面我从JDK 1.6获取的源代码:

public V put(K key, V value) {
    if (key == null)
        return putForNullKey(value);
    int hash = hash(key.hashCode());
    ...

}

/**
 * Offloaded version of put for null keys
 */
private V putForNullKey(V value) {
    for (Entry<K,V> e = table[0]; e != null; e = e.next) {
        if (e.key == null) {
            V oldValue = e.value;
            e.value = value;
            e.recordAccess(this);
            return oldValue;
        }
    }
    modCount++;
    addEntry(0, null, value, 0);
    return null;
}
public V put(K键,V值){
if(key==null)
返回putForNullKey(值);
int hash=hash(key.hashCode());
...
}
/**
*为空密钥卸载put版本
*/
私有V putForNullKey(V值){
for(条目e=表[0];e!=null;e=e.next){
如果(e.key==null){
V oldValue=e.value;
e、 价值=价值;
e、 记录存取(本);
返回旧值;
}
}
modCount++;
加法(0,null,value,0);
返回null;
}

它是特定于实现的-抛出NPE或使用
hashCode=0