我有这门课:
public class MyClass{
private static Map<int[], Terrain> allTerrain = new HashMap<int[], Terrain>();
public static void main(String[] args){
populate();
int[] test = {0, 0};
System.out.println(allTerrain.get(test));
}
private static void populate() {
for (int i=0; i<10; i++) {
int[] index = {i, i};
allTerrain.put(index, new Terrain());
}
int[] test = {0, 0};
System.out.println(allTerrain.get(test));
}
}
在方法内部 allTerrain.get()
方法返回对象的实例,但是当我使用 allTerrain.get()
时在该方法之外,它返回 null
对于所有条目。
一切都在主线程上运行,因此并发不是问题(我认为)。
关于如何解决这个问题有什么想法吗?
最佳答案
它不会从范围内部和外部的 allTerrain
map 中检索值。
null
null
问题是,当您在 HashMap 中使用对象作为键时,它需要以有用的方式实现 hashcode
和 equals
方式。具有相同值的数组不被视为相等。因此它们不引用相同的 key
Boolean equal = new int[]{1, 2}.equals(new int[]{1, 2}) // is false
关于java - 方法结束后向 HashMap 添加的条目将变为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46720784/