0
public static void Method1(String a)
{
    List<DataBean> list = new ArrayList<DataBean>();
    list = StaticClass.masterList; // it has prepopulated list item


    for (JavaBean bean: list) {
        //Some condition and we call bean.setters 

    }

}

为什么这里StaticClass.masterList在 for 循环中得到更新,但我在 bean 上调用了更新?

4

2 回答 2

2

对列表的引用是您正在复制的内容,并且不会更新。

在它引用的对象中可以更新什么。

笔记:

List<DataBean> list = new ArrayList<DataBean>();

list不是 a List,它只是对列表的引用,这就是为什么您可以将其分配给新对象的原因。

如果您想获取 masterList 的浅表副本,您可以这样做。

List<DataBean> list = new ArrayList<DataBean>(StaticClass.masterList);

这样,如果您更改列表,它不会更改主控。但是,如果您更改其中一个 DataBean,这将是可见的。如果你需要一个深拷贝,你可以做

List<DataBean> list = new ArrayList<DataBean>();
for (DataBean db: StaticClass.masterList)
     list.add(new DataBean(db));
于 2013-10-08T14:11:19.347 回答
2

因为listandStaticClass.masterList会引用同一个对象。

因此,如果您在其中的任何对象上调用 setter,list您也会看到其中的更改StaticClass.masterList

于 2013-10-08T14:11:29.360 回答