ホームページ > Java > &#&チュートリアル > Javaにおける参照と値の受け渡しについて詳しく解説

Javaにおける参照と値の受け渡しについて詳しく解説

巴扎黑
リリース: 2017-07-20 13:11:20
オリジナル
1439 人が閲覧しました

まずはコードの一部を見てみましょう。これは私が遭遇した筆記面接の質問です:

 1 /** 2  * ***面试题 3  */ 4 public class StringBufferTest { 5     public static void main(String[] args) { 6         int i = 10; 7         test(i); 8         System.out.println(i);//10 9         StringBuffer str = new StringBuffer("str");10         test2(str);11         System.out.println(str.toString());//str_add12         test3(str);13         System.out.println(str.toString());//str_add14     }15 16     public static int test(int m) {17         m = 30;18         return m;19     }20 21     public static StringBuffer test2(StringBuffer str2) {22         str2.append("_add");23         return str2;24     }25 26     public static StringBuffer test3(StringBuffer str3) {27         str3 = new StringBuffer("java");28         return str3;29     }30 31 }
ログイン後にコピー
View Code

値の転送:

i の値はテストでは入力されません。メソッド パラメータには値 30 が割り当てられ、30 になります

したがって、メソッド test(i) を実行した後、出力される i の値はまだ前の値 10 です

具体的なプロセスは次のとおりです:

変数 i- --->[保存値 10]

test(i) メソッドが呼び出されるとき、メモリ内の状況は次のとおりです。i はメモリ内の自分の値をコピーし、変数 m はコピーされた 10 を指します。 。 -変数i ---- & gt; [値10を格納] ↓ 値のコピーを実行

変数M ---- & gt; [値10を格納] この時、17行まで実行すると、 M M には値 30 が割り当てられ、このステップの操作は i とは関係ありません。

変数m--->[格納値30]

参照の受け渡し:(グローバル変数を変更する際は、変更が他の箇所に影響を与えないか特に注意してください)

test2メソッドに渡されるStrは参照ですstrに変更するため、str2の変更はstr

の値に影響します。そのため、メソッドtest2(str)を実行した後、出力されるstrの値はstr_addになります

具体的な処理は次のとおりです:

変数str---- >[ストレージ値 "str"]

test2(str) を実行します。これは値の転送とは本質的に異なることに注意してください。test2(str) を呼び出すと、変数 str2 も、 str ではなく str が指すメモリ空間を指します。 str のコピーを指します。 In Her In In In In In in In in in in in in in in in in in in inをそれぞれ。

変数 str-& gt; ["str_add" として追加]

変数 str2 /

TEST3 (STR) の後に出力される STR の値が Java ではなく STR_ADD である理由を考えてください。


主な理由は次のとおりです: str3 = new StringBuffer("java"); このコード行

は、受信値のコピーと同様に変更されます。新しいメソッドは、str が指すメモリの内容を変更しません。その中に新しいブロックを開きます。このスペースには文字列「java」が格納され、str3 はこのスペースを指します。

具体的な処理は以下の通りです:


プログラムは12行目まで実行され、strは「str_add」が格納されているメモリ空間を指します。

変数 str---->[記憶域値 "str_add"]

test3(str) を呼び出し、str で渡された の参照である str が指すメモリ空間を str3 に指します。

-->[ストレージ値 "str_add"]文字列「java」を保存するために新しいスペースが開かれ、str3 はこのスペースを指します。

変数str--->[格納値「str_add」]

str3の元の参照が切れます

変数str3--->[「java」を格納する別の空間]

以上がJavaにおける参照と値の受け渡しについて詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート