小弟最近遇到一个很2的问题,希望各位帮忙解决下...
先看代码:
private static List<String> list=new ArrayList<String>();public static void main(String[] args){
List<String> lis=new ArrayList<String>();
lis=getList();
lis.add("dddd");
System.out.println(lis.size()+" "+list.size());
}public static List<String> getList(){
list.add("aaa");
list.add("bbb");
list.add("ccc");
return list;
}输出的结果为:4 4
我很是郁闷,后来,我把
List<String> lis=new ArrayList<String>();
lis=getList();
lis.add("dddd");
System.out.println(lis.size()+" "+list.size());
改成
List<String> lis=new ArrayList<String>();
lis=getList();
list.add("dddd");
System.out.println(lis.size()+" "+list.size());
结果还是:4 4
我更郁闷了。
问了下高手,说引用的是同一个对象,这样说来,还真说得通...但是我想要的结果只是取list的值,不要它整个对象;
就是输出来的结果是:4 3
这个该怎么搞啊?
谢谢 各位啦...
先看代码:
private static List<String> list=new ArrayList<String>();public static void main(String[] args){
List<String> lis=new ArrayList<String>();
lis=getList();
lis.add("dddd");
System.out.println(lis.size()+" "+list.size());
}public static List<String> getList(){
list.add("aaa");
list.add("bbb");
list.add("ccc");
return list;
}输出的结果为:4 4
我很是郁闷,后来,我把
List<String> lis=new ArrayList<String>();
lis=getList();
lis.add("dddd");
System.out.println(lis.size()+" "+list.size());
改成
List<String> lis=new ArrayList<String>();
lis=getList();
list.add("dddd");
System.out.println(lis.size()+" "+list.size());
结果还是:4 4
我更郁闷了。
问了下高手,说引用的是同一个对象,这样说来,还真说得通...但是我想要的结果只是取list的值,不要它整个对象;
就是输出来的结果是:4 3
这个该怎么搞啊?
谢谢 各位啦...
public static List<String> getList(){
List lis=new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
lis.addAll(list);
return lis;
}
这样应该就能解决你的问题
在来改你的代码
这句你把lis 和list 2个引用指向了同一个对象
2个引用对应的实际是同一个对象 这样肯定是4,4
你的操作是不正确的,假如你确实想用list中的值 克隆一个就是了
那如果我是在一个实体类里面写的一个集合类型的属性呢!
好像set、get方法都是直接将值返回的呀!
那是不是也会造成我开始的那种效果...
哦,那如果这样呢!
我有个类objA,里面有个集合listA,然后在classB里面调用了listA并且赋值,在classC里面也调用了listA并且赋值,两次赋值不相同,那么现在listA的值就是在classC里面赋的值吧,但是我在classB里面进行其他操作的时候,使用的是classC赋的值啊..会不会造成这种影响?
所以执行过这个方法之后,你的lis和list指向的其实是同一个东西
所以结果会是4 4
如果想得到你要的那个结果
你可以把函数改为
public static List<String> getList(ArrayList list){
list.add("aaa");
list.add("bbb");
list.add("ccc");
return list;
}
然后main里 对list和lis分别调用getList方法
再对你的lis.add("ddd");就可以得到你想要的答案了
不知道我理解到你的意思没有
你出现那个问题的原因就是 两个引用指向了同一个东西 改变哪个都一样。。
克隆很简单例如:
ArrayList arrayList = new ArrayList();
ArrayList arrayList1 =(ArrayList) arrayList.clone();
不过克隆等于重新生成一份数据,如果数据量很大的话,谨慎使用
list.add("aaa");
list.add("bbb");
list.add("ccc");
return new ArrayList<String>(list);
}
lis.addAll(getList());
lis.add("dddd");