まずはコードの一部を見てみましょう。これは私が遭遇した筆記面接の質問です:
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 }
値の転送:
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 とは関係ありません。
変数 str-& gt; ["str_add" として追加]
変数 str2 / TEST3 (STR) の後に出力される STR の値が Java ではなく STR_ADD である理由を考えてください。
主な理由は次のとおりです: str3 = new StringBuffer("java"); このコード行
プログラムは12行目まで実行され、strは「str_add」が格納されているメモリ空間を指します。
str3の元の参照が切れます
変数str3--->[「java」を格納する別の空間]以上がJavaにおける参照と値の受け渡しについて詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。