Java 修改对象集合

Java 修改对象集合,java,call-by-value,Java,Call By Value,我正在使用一些Java代码,我有一个疑问。我有一个循环,它沿着集合运行,用一个方法修改它的每个对象。问题是,当你把一个对象传递给一个方法时,你真正传递的是什么?参考资料的复印件?内存地址?这是我的密码: for(Iterator it = colDesglosesBDI.iterator(); it.hasNext();) { DesgloseBDIVO desgloseBDI = (DesgloseBDIVO)it.next(); desgloseBDI = compl

我正在使用一些Java代码,我有一个疑问。我有一个循环,它沿着集合运行,用一个方法修改它的每个对象。问题是,当你把一个对象传递给一个方法时,你真正传递的是什么?参考资料的复印件?内存地址?这是我的密码:

for(Iterator it = colDesglosesBDI.iterator(); it.hasNext();)
{    
    DesgloseBDIVO desgloseBDI = (DesgloseBDIVO)it.next();
    desgloseBDI = completeDesgloseAgrup(desgloseBDI);
}
completedesglosegrup方法返回一个DesgloseBDIVO对象,这样我就可以用新属性替换旧对象。但也许我可以这样做:

for(Iterator it = colDesglosesBDI.iterator(); it.hasNext();)
{    
    DesgloseBDIVO desgloseBDI = (DesgloseBDIVO)it.next();
    completeDesgloseAgrup(desgloseBDI);
}
在这种情况下,该方法将是无效的,并且不返回任何对象。这样做有可能吗


java中的对象是堆上的数据结构,通过变量引用,因此永远不会传递对象,始终是对对象的引用。

来自Ken Arnold、James Gosling和David Holmes的“java编程语言,第四版”:

Java编程语言不通过引用传递对象;它
按值传递对象引用
。由于同一引用的两个副本引用同一个实际对象,因此通过一个引用变量所做的更改通过另一个可见。只有一个参数通过模式pass-by 价值观,这有助于保持简单


是的,如果
completedesglosagerup()
方法只更改参数的属性,而不尝试用新对象替换它,那么这是完全可能的

考虑这一点:

public void completeDesgloseAgrup( DesgloseBDIVO d )
{
    // will work, callee will see "something"
    d.setSomething( "something" );
}

public void completeDesgloseAgrup( DesgloseBDIVO d )
{
    // Won't work, as Java has call by value semantics. Callee won't see the new DesgloseBDIVO in callee's scope.
    d = new DesgloseBDIVO()
    d.setSomething( "something" );
}

干杯,

我想说这取决于
completedesglosagerup
方法的功能。你能把密码寄出去吗?