Di seguito è riportato un codice Java con cui sto riscontrando un problema:
import java.util.HashMap;
import java.util.ArrayList;
public class MyTestClass {
public static void main(String[] args) {
HashMap<String, ArrayList<String>> myHashMap = new HashMap<String, ArrayList<String>>();
ArrayList<String> catList = new ArrayList<String>();
catList.add("Meow");
myHashMap.put("Cat", catList);
ArrayList<String> tempList = myHashMap.get("Cat");
tempList.add("Purr");
// Prints {Cat=[Meow, Purr]} as expected.
System.out.println(myHashMap);
ArrayList<String> copyList = new ArrayList<String>();
copyList.add(tempList.get(0));
copyList.add(tempList.get(1));
// New list item
copyList.add("Drink milk");
tempList = copyList;
// Prints copyList: [Meow, Purr, Drink milk]
System.out.println("copyList: " + copyList);
// Prints tempList: [Meow, Purr, Drink milk]
System.out.println("tempList: " + tempList);
// Prints {Cat=[Meow, Purr]} - why not {Cat=[Meow, Purr, Drink milk]}?
System.out.println(myHashMap);
}
}
Perché gli elenchi sono "passati per riferimento" (so che Java passa effettivamente tutto in base al valore, ma le liste vengono effettivamente passate per riferimento), perché tempList = copyList
non rende il punto di valore HashMap a copyList?