【发布时间】:2013-08-19 20:48:15
【问题描述】:
今天我处理了一个让我非常困惑的 Java 问题。 我有以下代码:
List<ObjectXY> someList = obj.getListOfObjectsXY(); // getter returns 2 elements
someList.add(new ObjectXY());
obj.getListOfObjectsXY(); // getter now returns 3 elements
当我将一个元素添加到列表中时,getter 会被某种覆盖。这是因为someList 在这种情况下就像对 getter 结果的引用?或者还有什么导致这种效果的?
我通过使用另一个列表解决了以下代码的问题:
List<ObjectXY> someList = obj.getListOfObjectsXY(); // result: 2 elements
List<ObjectXY> someOtherList = new ArrayList<ObjectXY>();
someOtherList.addAll(someList);
someOtherList.add(new ObjectXY());
obj.getListOfObjectsXY(); // result: 2 elements
但我仍然有些困惑,因为我没想到 Java 会这样。 谁能向我解释我做错了什么以及为什么会这样?
提前致谢!
【问题讨论】:
-
因为在 Java 中,引用是按值传递的,
obj.getListOfObjectsXY()返回原始列表对象,该对象正在被您的add方法修改。
标签: java methods arraylist getter