首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

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

2012-03-26 
关于java.util.List的一个问题POJO类:Java codepublic class People {public String namepublic String s

关于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方法返……

热点排行