Java 在之前定义为相等时使两个列表不相等

Java 在之前定义为相等时使两个列表不相等,java,arrays,list,arraylist,Java,Arrays,List,Arraylist,我知道在使用list2=list1时,以及在更改list2时,list1也会被更改。但是我不想让我的列表改变。我必须使用list2=list1,但是有没有办法只获取list1[1,2,3,4,5]呢?如果您想list2引用与list1不同的列表,请复制: 改变 List1 [1, 2, 3, 4, 5] List2 [1, 2, 3, 4, 5] List1 Changed [1, 2, 3, 4, 5, 6] 到 如果希望list2引用与list1不同的列表,请复制: 改变 List1 [1

我知道在使用list2=list1时,以及在更改list2时,list1也会被更改。但是我不想让我的列表改变。我必须使用list2=list1,但是有没有办法只获取list1[1,2,3,4,5]呢?

如果您想
list2
引用与
list1
不同的
列表,请复制:

改变

List1 [1, 2, 3, 4, 5]
List2 [1, 2, 3, 4, 5]
List1 Changed [1, 2, 3, 4, 5, 6]


如果希望
list2
引用与
list1
不同的
列表,请复制:

改变

List1 [1, 2, 3, 4, 5]
List2 [1, 2, 3, 4, 5]
List1 Changed [1, 2, 3, 4, 5, 6]


您可以复制列表,而不只是为其指定引用:

list2=新的数组列表(list1);

您可以复制列表,而不只是为其指定引用:

list2=新的数组列表(list1);
您正在使用
list1
reference覆盖list2。如果您想将它们分开,只需添加它们,而不分配

list2=list1;
您正在使用
list1
reference覆盖list2。如果您想将它们分开,只需添加它们,而不分配

list2=list1;

list1
list2
都是变量,它们都是对类型为
ArrayList
的对象的引用。执行
list2=list1
后,它们具有完全相同的值,该值是对象的地址,而不是对象本身。这意味着您丢失了
list2
指向的原始列表,并且有两个变量指向内存中的同一位置

要保留两个独立的列表,可以将
list1
中的元素添加到
list2
,如下所示

list2.addAll(list1);
List list2=新的数组列表(list1);
或者这个:

List<Integer> list2 = new ArrayList<>(list1);
List list2=new ArrayList();
/*中间代码*/
列表2.addAll(列表1);

list1
list2
都是变量,它们都是对类型为
ArrayList
的对象的引用。执行
list2=list1
后,它们具有完全相同的值,该值是对象的地址,而不是对象本身。这意味着您丢失了
list2
指向的原始列表,并且有两个变量指向内存中的同一位置

要保留两个独立的列表,可以将
list1
中的元素添加到
list2
,如下所示

list2.addAll(list1);
List list2=新的数组列表(list1);
或者这个:

List<Integer> list2 = new ArrayList<>(list1);
List list2=new ArrayList();
/*中间代码*/
列表2.addAll(列表1);
ArrayList列表1=新建ArrayList();
ArrayList list2=新的ArrayList();
for(int i=1;i
ArrayList list1=new ArrayList();
ArrayList list2=新的ArrayList();

对于(int i=1;我可能会将
list1
的克隆分配到
list2
中。@Jeroensteenbeek:这里没有向任何方法传递任何内容。@Thilo确实如此,但引用正在更改,因此我认为这可能有助于解释将
list1
的克隆分配到
list2相反。@JeroenSteenbeeke:这里没有任何东西被传递给任何方法。@Thilo确实如此,但引用正在被更改,所以我认为这可能有助于解释问题。有一个方法可以做同样的事情,而不是创建新的对象@ꜱᴜʀᴇꜱʜᴀᴛᴛᴀ 是的,有,但该语句也用于替换
ArrayList list2=new ArrayList();
语句。有一种方法可以执行相同的操作,而不是创建新对象@ꜱᴜʀᴇꜱʜᴀᴛᴛᴀ 是的,有,但该语句也用于替换
ArrayList list2=new ArrayList();
语句。
List<Integer> list2 = new ArrayList<>(list1);
List<Integer> list2 = new ArrayList<>();
/*code inbetween*/
list2.addAll(list1);
    ArrayList<Integer> list1= new ArrayList<>();
    ArrayList<Integer> list2= new ArrayList<>();
    for(int i=1;i<=5;i++){
    list1.add(i);
    }
    System.out.println("List1 "+list1);
    list2=(ArrayList<Integer>) list1.clone();
    System.out.println("List2 "+list2 );
    list2.add(6);
    System.out.println("List1 Changed "+list1 );