让我说我像这样初始化我的列表:
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
只是将每个值更改为&#34;一个&#34;像这样:
private static void modifyList(ArrayList<String> a) {
for (int i = 0; i < a.size(); i++) {
a.set(i, "one");
}
}
如果我在调用此方法之前和之后打印列表,我希望相同的原始列表出现两次。但由于某种原因,在modifyList
中修改的ArrayList与main
中的ArrayList相同。
如果我尝试使用整数和字符串而不是列表进行相同的实验,他们会不进行修改。
任何人都可以解释原因吗?
答案 0 :(得分:4)
在Java中,参数按值传递。
但是,您将对ArrayList的引用传递给方法(并且引用本身按值传递),因此该方法修改了原始列表。
如果要确保不会发生这种情况,则需要传递一个不可变列表作为参数。