0

私はいくつかのJavaコードで作業していますが、疑問があります。Collection に沿って、そのオブジェクトのそれぞれをメソッドで変更するループがあります。問題は、メソッドにオブジェクトを渡すとき、実際には何を渡すのでしょうか? 参考書のコピー?メモリアドレス?これが私のコードです:

for(Iterator it = colDesglosesBDI.iterator(); it.hasNext();)
{    
    DesgloseBDIVO desgloseBDI = (DesgloseBDIVO)it.next();
    desgloseBDI = completeDesgloseAgrup(desgloseBDI);
}

メソッド completeDesgloseAgrup は DesgloseBDIVO オブジェクトを返すので、古いオブジェクトを新しい属性に置き換えることができます。しかし、多分私はこの方法でそれを行うことができます:

for(Iterator it = colDesglosesBDI.iterator(); it.hasNext();)
{    
    DesgloseBDIVO desgloseBDI = (DesgloseBDIVO)it.next();
    completeDesgloseAgrup(desgloseBDI);
}

この場合、メソッドは無効になり、オブジェクトを返しません。その方法でそれを行うことは可能ですか?

よろしく

4

3 に答える 3

0

Javaオブジェクトでは、変数によって参照されるヒープ上のデータ構造であるため、オブジェクトを渡すことはなく、常にオブジェクトへの参照を渡します。

于 2013-09-20T06:48:59.280 に答える
0

はい、completeDesgloseAgrup()メソッドが引数の属性のみを変更し、それを新しいオブジェクトに置き換えようとしない場合、それは完全に可能です。

このことを考慮:

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

乾杯、

于 2013-09-20T07:06:17.230 に答える