我想做这个例子中的事情。我无法弄清楚它为什么不起作用。 myMap在主类中没有任何价值。但是如果我将“putSomethingInTheMap”中的值放入地图中,它在主类中具有正确的值。
你能给我一个如何处理这样的事情的建议吗?
public static void main(String[] args) {
Map<String, Integer> meineMap = new HashMap<>();
int wert = 1;
putSomethingInTheMap(meineMap, wert);
System.out.println(meineMap.get("A"));
}
private static void putSomethingInTheMap(Map<String, Integer> myMap, int value) {
myMap = insert(value);
}
private static Map<String, Integer> insert(int wert) {
Map<String, Integer> map = new HashMap<>();
map.put("A", wert);
return map;
}
答案 0 :(得分:1)
private static void putSomethingInTheMap(Map<String, Integer> myMap, int value) {
myMap.put("A", wert);
}
答案 1 :(得分:0)
基本上你正在做方法pass by refrence
。在主类中,您创建一个地图并将其传递到putSomethingInTheMap
,由insert
返回的地图分配该地图。
因此,如果你在主类中有价值,那是因为传递给方法的参考。
答案 2 :(得分:0)
因为meineMap引用与原始引用相同。您在 insert 方法中声明了具有新值的新引用,并且java方法调用是按值传递,但是您传递引用 < em>在 putSomethingInTheMap 的参数中作为值传递!
答案 3 :(得分:0)
private static Map<String, Integer> insert(int wert) {
Map<String, Integer> map = new HashMap<>();
map.put("A", wert);
return map;
}
这部分是错误的,因为你在这里做的是,对于地图中的每个插入操作,你创建一个新的地图(将是空的)并在这个地图中添加一个值并返回这个地图。 现在
myMap = insert(value);
每次进行插入操作时,调用总是会得到一个只有1个值的地图。
<强>修正:强>
您无需在insert( int wert )
中创建新地图,只需调用java地图的put()
即可。解决方案代码已由@Maurice Perry发布