//即使第一次在 addMap 方法中初始化,sampleMap 始终为 null
公开课范例{
private static HashMap<Long, Long> sampleMap;
public Sample() {
addToMap(sampleMap, 100L, 100L);
addToMap(sampleMap, 200L, 200L);
addToMap(sampleMap, 300L, 300L);
addToMap(sampleMap, 400L, 400L);
}
public HashMap<Long, Long> getSampleMap() {
return sampleMap;
}
private void addToMap(HashMap<Long, Long> map, Long key, Long value) {
if (map == null) {
map = new HashMap<Long, Long>();
}
map.put(key, value);
}
public static void main(String[] args) {
Sample obj = new Sample();
obj.getSampleMap();
}
最佳答案
addToMap
创建一个 HashMap 实例并将其分配给局部变量。它不会更改 sampleMap
静态变量的值。
Java 是一种按值传递的语言。因此,当您将变量传递给方法时,该方法不能更改该变量的值。如果该方法为变量分配了一个新值,则该分配是方法的本地分配,并且不会更改传递给该方法的原始变量的值。
您有多种选择。以下是其中一些:
在声明时初始化 sampleMap
:
private static HashMap<Long, Long> sampleMap = new HashMap<Long, Long>();
或者在第一次调用addToMap
之前初始化sampleMap
:
public Sample() {
sampleMap = new HashMap<Long, Long>();
addToMap(sampleMap, 100L, 100L);
addToMap(sampleMap, 200L, 200L);
addToMap(sampleMap, 300L, 300L);
addToMap(sampleMap, 400L, 400L);
}
或者不将sampleMap
传递给addToMap
。 addToMap
可以直接访问它:
private void addToMap(Long key, Long value) {
if (sampleMap == null) {
sampleMap = new HashMap<Long, Long>();
}
sampleMap.put(key, value);
}
最后一件事。实例方法返回静态成员毫无意义。将 getSampleMap()
设为静态,或将 sampleMap
设为实例变量(即非静态)。 addToMap()
也是如此。
关于java - 为什么静态 hashmap 在下面的情况下总是 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31138532/