java - Java "Pass by reference"是否不适用于集合中存在的元素

标签 java pass-by-reference

我有一个列表,如下所示:

List<MyObject> list  = complexObject.getMyObjectList();
for(final MyObject obj in list){
    // set something in obj. .............(1)
}

我调试了上面的代码,发现修改后的 MyObject 没有反射(reflect)在复杂对象中,除非我执行以下操作..

complexObject.setList(list);

我认为Java通过“引用传递”来完成所有事情。我错过了什么吗? ?

最佳答案

getMyObjectList() 函数的实现可能会在返回列表之前对其进行深层复制:

protected List<MyObject> objects = new ArrayList<MyObject>();
// ...
public List<MyObject> getMyObjectList() {
    List<MyObject> os = new ArrayList<MyObject>();
    for (Object o: this.objects) {
      os.add(o.clone());
    }
    return os;
}

这是避免意外改变列表和/或列表成员的常见习惯用法。

关于java - Java "Pass by reference"是否不适用于集合中存在的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8808112/

相关文章:

java - RestTemplate -- 默认超时值

java - 如何在JCreator中逐行运行Java项目?

java - 如何通过 Javadocs 中的参数引用正确指定返回

java - 通过引用方法传递参数的正确且最佳的方法是什么?

c++ - C++/错误: no matching function for call to calcGrossWages()

pointers - 如何在 Go 中将服务指针从一个包传递到另一个包?

java - 如何在 Firebase 中调用内部字段

java - 无法弄清楚如何在java中重叠图像

java - Java 是 "pass-by-reference"还是 "pass-by-value"?

java - 查看 SSLFactory 使用的 keystore ?异常 : "sun....certpath.SunCertPathBuilderException: unable to find valid certification path to requested target"