Javaには「参照渡し」オプションがないと思いますが、なぜですか?時々それは非常に必要とされるからです。
3 に答える
参照によって値を渡す必要があると感じるときはいつでも、代わりに値によって参照を渡します。Javaには「参照渡し」メカニズムはありませんが、参照はあります。したがって、これらの参照を値で渡すだけです。
参照で渡す必要があるのはout
、Cのキーワードなどの関数から複数の値を返すことだけだと思います。これをJavaで行うには、オブジェクトを保持するクラスを作成するか、多くの人が提供する既存のペアクラスを使用します。ライブラリ。
同様に、他の何かを参照するスタブオブジェクトを渡すことができます。次に、オブジェクト内の参照を変更して、外部に反映されることを確認できます。
public static class Holder<T> {
public T value;
public Holder(T value) {
this.value = value;
}
}
private Holder<Object> itsValueCanBeSeenAsPassedByReferencce
= new Holder<Object>("a");
public void doSomething(Holder<Object> holder) {
holder.value = "b";
}
Javaでは、どのタイプの引数を渡しても、対応するパラメーター(プリミティブ変数またはオブジェクト参照)がそのデータのコピーを取得します。これは、値渡し(つまり、値渡し)が正確に機能する方法です。Javaでは、呼び出し元のメソッドがオブジェクトの参照を呼び出し元のメソッドへの引数として渡す場合、渡された参照が最初にコピーされてから、呼び出されたメソッドに渡されます。渡された元の参照とコピーされた参照の両方が同じオブジェクトを指します。したがって、どの参照を使用する場合でも、常に同じ元のオブジェクトを変更することになります。これは、参照によるパスも同様に機能します。