首先声明,由于我的笔记本电脑上的互联网无法使用,因此我通过手机发布这篇文章,无法提供任何代码。好了,问题是这样的:假设我有两个类:类一和类二。类一具有一个ArrayList
作为其属性,并从类二调用了一个void方法,并将该ArrayList
作为参数传递。现在,该方法初始化另一个ArrayList
并使其等于由我传递的参数,并对该新的ArrayList
进行更改。有趣的是,即使是作为参数传递的原始ArrayList
也在发生变化。可能的原因是什么?
首先声明,由于我的笔记本电脑上的互联网无法使用,因此我通过手机发布这篇文章,无法提供任何代码。好了,问题是这样的:假设我有两个类:类一和类二。类一具有一个ArrayList
作为其属性,并从类二调用了一个void方法,并将该ArrayList
作为参数传递。现在,该方法初始化另一个ArrayList
并使其等于由我传递的参数,并对该新的ArrayList
进行更改。有趣的是,即使是作为参数传递的原始ArrayList
也在发生变化。可能的原因是什么?
ArrayList clonedCopy = new ArrayList(list1.size());
for (Object obj : list1) {
clonedCopy.add(obj.clone());
}
ArrayList copy = new ArrayList(incomingList);
。 - user949300示例代码:
public class MethodArguments {
public static void main(String args[]) {
ArrayList<String> a = new ArrayList<String>();
a.add("Steve");
a.add("Daniel");
a.add("John");
a.add("Maxi");
a.add("Jeni");
System.out.println(a);
display(a);
getSize(a);
}
static void display(ArrayList<String> arrayList1) {
arrayList1.add("Pollard");
System.out.println(arrayList1); // passing the arraylist values and
// adding the element
}
static void getSize(ArrayList<String> arrayList1) {
System.out.println(arrayList1.size()); // getting the size of arraylist
// by passing arguments to
// method
}
}
输出:
[史蒂夫,丹尼尔,约翰,马克西,珍妮]
[史蒂夫,丹尼尔,约翰,马克西,珍妮,波拉德]
6
这是因为当你将其等于时,新的数组列表指向同一旧数组。
这个小例子应该可以澄清它。
import java.util.ArrayList;
import java.util.List;
public class JavaApplication1 {
public static void main(String[] args) {
List <String> origList = new ArrayList<>();
origList.add("a");
origList.add("b");
JavaApplication1 app = new JavaApplication1();
app.addToList(origList);
for(String str:origList){
System.out.println(str);
}
}
private void addToList(List<String> strList){
System.out.println("inside addToList");
List <String> newList = new ArrayList<>();
// newList = strList; //This is how you are doing it
newList.addAll(strList); //This is how you should do it.
newList.add("x");
}
}
new ArrayList<>();
。 - user5047085