java - 为什么静态 hashmap 在下面的情况下总是 null

标签 java hashmap

//即使第一次在 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 传递给addToMapaddToMap 可以直接访问它:

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/

相关文章:

java - 带有执行器的线程池的 POC(概念验证)

java - 理解抽象类和方法并正确重写它们

java - 读取分块文件 Netty Java

java - 普通 Json 字符串到 HashMap

java - 隐藏组件时停止 Swing 计时器

java - 在 Eclipse 中进行 Android dex'ing 之前始终运行混淆器

java - Hashmap 中的 Hashmap

java - 使用 Java 进行摩尔斯电码转换

java - 使用 hashmap 并获取新创建的对象时,Java 中的 hashCode 重写返回 null

java - 如何为特定对象创建 HashMap