-1

次のコードがあります。

public class PassReferenceByValue {


    static void modify(String m)
    {
       m = "Else";
    }


    public static void main(String [] arg)
    {
       String actual = "Something";

       modify(actual);

       System.out.println(actual);

    }
}

印刷されますSomething

Javaはオブジェクトをまったく渡さないことがわかりました。代わりに、渡された参照のコピーを作成します。私が正しく理解していれば、modify(actual)Java を呼び出すと、同じオブジェクトへの別の参照が作成されます。これで、 object を参照する 2 つの参照ができましたactual。次に、2 番目の参照によってオブジェクトを変更すると、オブジェクトが変更されます。actualコピーされた参照を介してオブジェクトに同じアクセス権があるため、オブジェクトを変更する必要があります。

参照を値で渡すという概念を理解できない場所を誰かに説明してもらえますか?

4

5 に答える 5

0

これをチェックして

Java の値渡しと参照渡しがうまく説明されています

于 2013-05-06T11:21:08.840 に答える
0
  1. 文字列は不変ですが、それは別の議論です
  2. String reference が指す「オブジェクト」を変更していませんactual。メソッドmodify()では、参照を上書きして、 という新しい Stringオブジェクトを指すようにしています"Else"。これは、 が指すオブジェクトに「影響」を与えません。したがって、印刷しても同じままですactualactual

私がポイント1を作ろうとしている理由は、あなたのmodify方法が以下のようなものだったとしましょう

public void modify(String s) {
   s.replaceAll("Some", "Many");
}

不変の動作のために、まだactual印刷されていたでしょう。"Something"String

于 2013-05-06T11:21:15.387 に答える
0

オブジェクトの参照m内でのみ表示されるローカル変数を変更しています。modify()値「Else」を持つ新しい String オブジェクトを作成し、mそれを指し示しています。

その後、 を出てmodify()印刷actualすると、テキスト「Something」を含む String オブジェクトへの参照のままです。

于 2013-05-06T11:21:41.430 に答える
0

Java のすべての「変数」は、オブジェクトが存在するときのメモリ内のアドレスへの参照です。

だからあなたは持っています:

actual -> String("Something")

メソッド呼び出しの後

actual -> String("Something")

m -> String("Something")

あなたはただ変化しているm -> String("Else")

ボットではないactual -> String("Something")

ここでString("...")の表記は、値が「...」のオブジェクト String を意味します。

于 2013-05-06T11:20:29.133 に答える