我有這樣的代碼:爲什麼值會在方法之外改變?
private MyClass myMethod(HashMap<MyEnum, String> preferences, String type){
// stuff
preferences.put(MyEnum.enum, type);
MyClass myClass = ExtractMyClass(preferences);
return myClass;
}
我把這種方法在這裏:
public List<MyClass> myBigClass(){
List<MyClass> myList = new ArrayList<>();
//do a lot of stuff
Map<MyEnum, String> preferences = new HashMap<>();
preferences.put(MyEnum.enum, "value0");
myList.add(myMethod(preferences, "value1")); //first call
myList.add(myMethod(preferences, "value2")); //second call
myList.add(myMethod(preferences, "value3")); //third call
return myList;
}
在第一次調用,preferences
只包含value0
在第二次調用,它包含了value0
「和value1
而在第三次調用中,它有value0
,value1
和value2
我想的是,三個電話,preferences
應該只有value0
爲什麼其他值呆在那裏,即使這是一個方法裏面添加?
基本上你想了解通過值和傳遞參考之間的區別;以及Java中傳遞值的方式仍然會導致您正在觀察的結果。看到這裏http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value首發... – GhostCat
我已經讀過,謝謝 – Mel