引用伝値の問題を考察する

780 ワード

筆記試験のテーマは以下の通りです.
次のプログラムコードが出力された結果は、________.
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つの変数の値を変更しても、もちろん別の変数の値には影響しません.