次のJavaコードセグメントは、AP Computer Science練習試験のものです。Java文字列変数の設定 - 参照または値ですか?
String s1 = "ab";
String s2 = s1;
s1 = s1 + "c";
System.out.println(s1 + " " + s2);
このコードの出力は、BlueJの「abc ab」です。しかし、可能な回答選択肢の1つは "abc abc"です。その答えは、JavaがString型の参照をプリミティブ型(値による)やObject(参照による)のように設定するかどうかによって決まります。
int s1 = 1;
int s2 = s1; // copies value, not reference
s1 = 42;
System.out.println(s1 + " " + s2); // prints "1 42"
をしかし、我々はバランスを保持する銀行口座のオブジェクトを持っていたと言う:
はこれをさらに説明するために、プリミティブ型で例を見てみましょう。
BankAccount b1 = new BankAccount(500); // 500 is initial balance parameter
BankAccount b2 = b1; // reference to the same object
b1.setBalance(0);
System.out.println(b1.getBalance() + " " + s2.getBalance()); // prints "0 0"
文字列にはどのような場合がありますかわかりません。彼らは技術的にオブジェクトですが、私のコンパイラは、変数を互いに設定するときに、それらをプリミティブ型のように扱うようです。
Javaがプリミティブ型のような文字列変数を渡す場合、答えは "abc ab"です。しかし、Javaが文字列変数を他のオブジェクトへの参照のように扱う場合、答えは "abc abc"になります
あなたはどちらが正解であると思いますか?
文字列のドキュメントを見ましたか?それがクラスかプリミティブかどうかは分かりますか? – DJClayworth
あなたの質問に答えて、[javadoc](http://download.oracle.com/javase/6/docs/api/java/lang/String.html)を読んでみてください。 –
'System.out.println(s1 +" "+ s2); // print "1 42"は真ではありません。それは '' 42 1 "' – whytheq