每个循环的Java是返回引用还是引用副本?

ryb*_*ome 7 java foreach reference

我知道Java并不真正使用精确的引用传递,而是通过引用副本传递.这就是为什么刚尝试交换引用的交换函数在Java中不起作用的原因.for-each循环是否也这样做?例如,给出以下代码......

for (Constraint c : getLeafNodes(constraintGraph)){
    c = new Constraint();
}
Run Code Online (Sandbox Code Playgroud)

...我想通过一个递归定义的树状结构,找到所有叶子节点.每个叶节点都需要用新的空节点替换.这会做我期望的,还是只是将每个叶节点的引用副本设置为新节点?

我在另一段传递单元测试的代码上写了一个类似的方法,这让我觉得for-each循环使用引用,而不是引用副本,但我们的代码质量软件将此标记为局部变量的死存储,主要错误.

谢谢.

Chr*_*son 10

它也不会这样做.这与说法相似

Object c = getObject();
c = new Object();
Run Code Online (Sandbox Code Playgroud)

你所做的就是改变所指的东西c.即使Java支持真正的pass-by-reference,这也行不通

  • 噢,你说得对.我不知道我在想什么.我应该检索每个叶子的父,然后调用某种parent.setChild(新的Constraint())方法.谢谢. (2认同)