当前位置: 代码迷 >> Java相关 >> 关于java.util.List的一个有关问题
  详细解决方案

关于java.util.List的一个有关问题

热度:6146   发布时间:2013-02-25 21:48:01.0
关于java.util.List的一个问题

POJO类:
Java code
public class People {    public String name;    public String sex;    public People(String name, String sex) {        this.name = name;        this.sex = sex;    }}


业务逻辑:
Java code
import java.util.ArrayList;import java.util.List;public class Service {    public List<People> getList(List<People> list) {        List<People> l1 = new ArrayList<People>();        People p = new People("123", "男");        for (People p1 : list) {            p.name = p1.name;            p.sex = p1.sex;            System.out.println(p.name + " " + p.sex);            l1.add(p);        }        return l1;    }}


测试代码:
Java code
import java.util.ArrayList;import java.util.List;public class Test {    public static void main(String[] args) {        List<People> l = new ArrayList<People>();        l.add(new People("aaa", "男"));        l.add(new People("bbb", "女"));        List<People> result = new Service().getList(l);        for (People p : result) {            System.out.println(p.name + " " + p.sex);        }    }


为什么控制台会输出:

bbb 女
bbb 女

而不是

aaa 男
bbb 女

呢?

------解决方案--------------------------------------------------------
Java code
//参考:当修改p属性后,list中的元素属性也会变化import java.util.*;class People {    public String name;    public String sex;    public People(String name, String sex)     {        this.name = name;        this.sex = sex;    }    public String toString()    {        return this.name+"-"+this.sex;        }}class Test{    public static void main(String []args)    {        People p = new People("aa","AA");        List<People> list = new ArrayList<People>();        list.add(p);        System.out.println(list);                p.name = "bb";//注意:当修改p属性后,list中的元素属性也会变化        list.add(p);        System.out.println(list);    }}
------解决方案--------------------------------------------------------
People p = new People("123", "男");这句代码放到for循环中,就可以得到你想要的结果了,至于什么原因,给你点提示,对象与引用的问题,两个引用指向同一个对象,那么这两个引用就有相同数据了。仔细想想。。
------解决方案--------------------------------------------------------
探讨
关键在这部分代码
People p = new People("123", "男");
for (People p1 : list) {

p.name = p1.name;
p.sex = p1.sex;
System.out.println(p.name + " " + p.sex);
l1.add(p);
}
程序最终使用的是getList方法返……
  相关解决方案