Java 是否“按引用传递”?不适用于集合中存在的元素

发布于 2024-12-25 17:52:21 字数 387 浏览 1 评论 0原文

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

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

我调试了上面的代码,并发现修改后的 MyObject 没有反映在复杂对象中,除非我执行如下操作。

complexObject.setList(list);

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

I have a List which i get like following :

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

I debugged the above code and looked found out the the modified MyObject's are not reflected in the complexObject unless I do something like following..

complexObject.setList(list);

I thought Java does everything by "Pass by reference". Am i missing something. ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

残月升风 2025-01-01 17:52:21

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;
}

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

The implementation of the getMyObjectList() function might do a deep copy of the list before returning it:

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;
}

This is a common idiom to avoid accidentally mutating the list and/or members of the list.

风吹短裙飘 2025-01-01 17:52:21

在 java 中,像 myObject 这样的变量保存对对象的引用。

public MyClass myObject = new MyClass();
foo( myObject );

因此,

public void foo( MyClass _obj )
{
  //some code here
}

如果将 myObject 变量传递给函数,则 myObject 的值将按值传递。但 myObject 变量的副本显示与 myObject 相同的对象。 _obj 和 myObject 具有相同的值“对象引用”。

In java your variables like myObject holds a reference to object.

public MyClass myObject = new MyClass();
foo( myObject );

and

public void foo( MyClass _obj )
{
  //some code here
}

So if you pass myObject variable to a function, myObject's value passed by value. But the copy of myObject variable shows the same object with myObject. _obj and myObject has the same value "reference of object".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文