私有ArrayList由类中的所有成员共享

时间:2013-02-22 00:43:03

标签: java class arraylist private

当我使用setAssetWeight方法设置存储在ArrayList中的对象的值时,对象的每个实例都将其ArrayLists中的值更改为使用setAssetWeight设置的值。

private List<Asset> assetList = new ArrayList<Asset>();
private int fitness;

public Portfolio(){    
}

public void setAssetWeight(int i, int weight){
    this.assetList.get(i).setWeight(weight);
}

例如:如果我创建两个Portfolio对象,pf1和pf2,那么执行

pf1.setAssetWeight(0, 10);

当我打印pf2中包含的资产的权重时,它会将第一个资产显示为权重为10,而不是默认值为0.

为什么当我使用另一个对象调用方法时,对象的一个​​实例的ArrayList中的值会被更改? ArrayList被声明为private,这不应该意味着它只能被它所属的对象修改吗?

Portfolio1 pf1 = new Portfolio1();
Portfolio1 pf2 = new Portfolio1();

pf1.add(0, assetList.get(0));
pf1.add(1, assetList.get(1));
pf1.add(2, assetList.get(2));

pf1.setAssetWeight(0, 10);

System.out.println(pf2.toString());

这是我用来测试的代码部分,在这个例子中,print语句将打印出AssetList中的第一个资产的权重为10,即使我只设置了pf1的权重,而不是pf2。

public void add(Asset asset){
    this.assetList.add(asset);
}

这是用于将资源添加到列表中的代码。

1 个答案:

答案 0 :(得分:1)

无法重现。毫无疑问,您将相同的Asset实例添加到List&lt; Asset&gt;在这两种情况下。