List<Object> lo=new ArrayList<>();
List<String> ls=new ArrayList<>();
List<String> ls1=new ArrayList<>();
//lo=ls;
ls1=ls;
ls1.add("ddd");
System.out.println(ls.get(0));//output :ddd
我的问题是,我添加了&#34; ddd&#34;在ls1但我得到了#ddd&#34;来自ls.How是否可能?ls1和ls是否相同List?
答案 0 :(得分:3)
不,他们不一样。它们只指向相同的内存位置。
ls1=ls;
上面的代码片段使两个列表都指向相同的内存位置。因此,ls1
的所有更改也会在ls
中进行更改。
答案 1 :(得分:1)
ls1=ls;
这将使引用ls1
和ls
指向同一个list
对象。 list
之前引用的ls1
将不再可访问,并且将被Java垃圾收集。
所以,是的,无论您使用list
引用添加到ls1
/从ls
添加/删除的内容都将通过value="<?php echo set_value('s_county')
反映出来,反之亦然,因为它们指的是相同的列表。
答案 2 :(得分:1)
这是逻辑,因为当您将ls列表分配给ls1 ls1=ls;
时,实际上它们指向内存中的相同地址,如果您添加一些思考到第一个列表中将在第二次重新安置时获得相同的结果。
答案 3 :(得分:1)
ls1
和ls
指向同一个对象。
答案 4 :(得分:0)
否,起初它们不一样,但是当您在ls1=ls;
中分配ls
ls1
的地址时,它们的内存地址位置相等,现在如果您更改ls1
,ls
已更改,反之亦然
如果你想制作两个没有这种寻址的列表,你可以使用clone
方法:
List list = new ArrayList();
list.add("A");
List list2 = ((List) ((ArrayList) list).clone());
System.out.println(list);
System.out.println(list2);
list.clear();
System.out.println(list);
System.out.println(list2);
输出将是:
[A]
[A]
[]
[A]