【发布时间】:2013-02-18 09:13:08
【问题描述】:
我的程序中有以下代码:
...
private void generateStack() {
List<AdvertisementsModel> adsForModel = Storage.getAdsForId(model.getId());
...
adsForModel.clear();
...
Storage 是具有静态字段和方法的静态类。 generateStack 方法在另一个类和实例对象中。如果asdForModel 引用不是最终的,为什么adsForModel.clear(); 会影响Storage 类中的列表?
【问题讨论】:
-
如果是final的话,原名单不受影响吗?我对此表示怀疑......这是同一个列表实例。为此,我将使用
new ArrayList<AdvertisementsModel>(Storage.getAdsForId(model.getId()));,它创建一个新实例,如果可能,修改Storage类以返回原始列表的 UnmofifiableList。 -
在列表上使用
final只会使列表引用不可变而不是列表内容 -
@ChristopheRoussy,非常好的笔记,谢谢。
标签: java reference pass-by-reference