假设我像这样初始化我的列表:
public static void main(String[] args) {
ArrayList<String> a = new ArrayList<String>();
a.add("one");
a.add("two");
a.add("three");
a.add("four");
modifyList(a);
}
这里modifyList
简单地改变每个值的“一个”,例如:
private static void modifyList(ArrayList<String> a) {
for (int i = 0; i < a.size(); i++) {
a.set(i, "one");
}
}
如果在调用此方法之前和之后打印列表,则我希望同一原始列表出现两次。但是由于某种原因,在中修改modifyList
的ArrayList与中的ArrayList相同main
。
如果我尝试使用int和Strings而不是Lists进行相同的实验,则它们不会被修改。
谁能解释为什么?
在Java中,参数是通过值传递的。
但是,您将对ArrayList的引用传递给方法(并且引用本身按值传递),因此该方法修改了原始列表。
如果要确保不会发生这种情况,则需要传递一个不可变的列表作为参数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句