【发布时间】:2014-11-13 23:28:51
【问题描述】:
考虑以下代码:
import java.util.*;
class Employee {
String name;
public Employee(String nm) {
this.name=nm;
}
}
public class HashMapKeyNullValue {
Employee e1;
public void display(){
Employee e2=null;
Map map=new HashMap();
map.put(e2, "25");
System.out.println("Getting the Value When e2 is set as KEY");
System.out.println("e2 : "+map.get(e2));
System.out.println("e1 : "+map.get(e1));
System.out.println("null : "+map.get(null));
map.put(e1, "");
System.out.println("Getting the Value when e1 is set as KEY");
System.out.println("e2 : "+map.get(e2));
System.out.println("e1 : "+map.get(e1));
System.out.println("null : "+map.get(null));
map.put(null, null); // null as key and null as value
System.out.println("Getting the Value when setting null as KEY and null as value");
System.out.println("e2 : "+map.get(e2));
System.out.println("e1 : "+map.get(e1));
System.out.println("null : "+map.get(null));
map.put(null, "30");
System.out.println("Getting the Value when setting only null as KEY");
System.out.println("e2 : "+map.get(e2));
System.out.println("e1 : "+map.get(e1));
System.out.println("null : "+map.get(null));
}
public static void main(String[] args) {
new HashMapKeyNullValue().display();
}
}
程序的输出是:
Getting the Value When e2 is set as KEY
e2 : 25
e1 : 25
null : 25
Getting the Value when e1 is set as KEY
e2 :
e1 :
null :
Getting the Value when setting null as KEY and null as value
e2 : null
e1 : null
null : null
Getting the Value when setting only null as KEY
e2 : 30
e1 : 30
null : 30
这里e1, e2, and null 作为键是如何相互关联的。这三个是否都分配给相同的哈希码?如果是,为什么?
由于所有三个看起来都不同,因此一个值的变化会改变另一个值。这是否意味着只有一个 key 条目被写入 HashMap 或 e1, e2, or null,因为它们都被视为同一个 key。
【问题讨论】:
-
e1 和 e2 的值为空。 Java 是按值传递的,当该变量用作调用参数时,它将仅传递该变量的值。也就是变量在函数内部永远不会被重新赋值,函数中的参数名与任何变量都没有关系。
-
HashMap having null as key 的可能重复项
标签: java collections null hashmap hashcode