引用伝値の問題を考察する
780 ワード
筆記試験のテーマは以下の通りです.
次のプログラムコードが出力された結果は、________.
答えはページの下にある
なに???あなたの答えは:AB,AB!!!!!!おめでとうございます.答えが間違っています.正解はAB、Bです.
解釈:メソッドoperate(StringBuffer x,StringBuffer y)を呼び出すときに参照伝達値が発生します.ここでy=xです.トラップで、多くの人はy=xを実行すると思っています.その後、参照bは、参照aが指すオブジェクトを再び指します.これは間違っていますが、この文はメソッドmainの中の参照bに影響しません.ここで、変更パラメータの参照は実パラメータの参照には影響しません.参照伝達が発生した場合、実パラメータの参照のコピーを形パラメータに付与するので、すでに2つの変数に相当しますが、この2つの変数の値は同じです.1つの変数の値を変更しても、もちろん別の変数の値には影響しません.
次のプログラムコードが出力された結果は、________.
public class Test {
static void operate(StringBuffer x, StringBuffer y) {
x.append(y);
y = x;
}
public static void main(String[] args) {
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
operate(a, b);
System.out.println(a + "," + b);
}
}
答えはページの下にある
なに???あなたの答えは:AB,AB!!!!!!おめでとうございます.答えが間違っています.正解はAB、Bです.
解釈:メソッドoperate(StringBuffer x,StringBuffer y)を呼び出すときに参照伝達値が発生します.ここでy=xです.トラップで、多くの人はy=xを実行すると思っています.その後、参照bは、参照aが指すオブジェクトを再び指します.これは間違っていますが、この文はメソッドmainの中の参照bに影響しません.ここで、変更パラメータの参照は実パラメータの参照には影響しません.参照伝達が発生した場合、実パラメータの参照のコピーを形パラメータに付与するので、すでに2つの変数に相当しますが、この2つの変数の値は同じです.1つの変数の値を変更しても、もちろん別の変数の値には影響しません.