你的理解是正確的;集合持有對象的引用。例如,這樣的:
final StringBuilder stringBuilder = new StringBuilder();
final List<StringBuilder> stringBuilderList = new ArrayList<StringBuilder>();
stringBuilderList.add(stringBuilder);
stringBuilderList.add(stringBuilder);
stringBuilder.append("yes");
System.out.println(stringBuilderList);
將打印:
[yes, yes]
因爲只有一個StringBuilder
實例,因此附加"yes"
是在列表中的每一個元素。
不過需要注意的集合,通過不參考持有這些引用按值。例如,這樣的:
StringBuilder stringBuilder = new StringBuilder("yes");
final List<StringBuilder> stringBuilderList = new ArrayList<StringBuilder>();
stringBuilderList.add(stringBuilder);
stringBuilder = new StringBuilder("no");
// now stringBuilder refers to a different object than before
stringBuilderList.add(stringBuilder);
System.out.println(stringBuilderList);
將打印:
[yes, no]
因爲列表的兩個元素是指不同的對象,即使這兩個對象是由相同的變量確定。
想要找出代碼中出現問題的更多幫助,我認爲您必須發佈一個最小程序來演示此問題。
可能重複[按值傳遞或通過引用在Java?](http://stackoverflow.com/questions/7301637/pass-by-value-or-pass-by-reference-in-java) –