所以我有一个静态方法,它接受 HashMap
和一些其他参数并修改 HashMap
:
public static void foo(HashMap映射,其他参数)
假设我有一个名为 Bar
的类,它有两个实例变量 HashMap
。
我将这些 HashMap
之一传递到 foo
中,打算对其进行修改(并且不传递另一个 HashMap)。我是否正确地说,由于仅此一个方法调用,HashMap
不可能被 foo
修改?
我问是因为这似乎发生在我身上......
最佳答案
如果你有
Map<String,String> map1=new HashMap<String,String>();
和
Map<String,String> map2=new HashMap<String,String>();
如果将map1传递给方法,则对map1的任何更改都不会反射(reflect)在map2中
因为map1和map2代表内存中的两个不同的对象。
如果您分配map1=map2
,则两个映射都引用同一对象,因此修改一个对象将反射(reflect)在另一个对象引用中。 Java 通过引用传递对象(这不是 100% 正确,传递的是引用的值)。
对于存储在两个映射中的相同对象引用,您更改一个映射上对象的属性将反射(reflect)在另一个对象中的对象中,因为您正在更改同一对象的行为。它将反射(reflect)引用它的地方的更改。
关于java - 将实例变量传递给静态方法——并修改另一个实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17873193/