Java Silver黒本の問題です。以下コード↓↓↓
public class Sample {
public static void main(String[] args) {
String str = "apple";
String[] array = {"a","p","p","l","e"};
String result = "";
for(String val : array) {
result = result + val;
}
boolean a = str == result;
boolean b = str.equals(result);
System.out.println(a + ":" + b);
}
}
こちらのコードを実行した結果はどうなるのか?という問題なのですが、
その解答は false : true です。
大枠としては納得できるしこの問題の意図も理解できるのですが、この解答に一つ違和感があります。
resultにvalが代入されて行く過程で、最終的にresultの値は"apple"という文字列になります。
その時点でstrにもともと定義されていた**"apple"という文字列にresultの参照値が切り替わる可能性があるのではないか?**と私は思いました。
つまり、実行結果は true : true となる可能性があるので、一概に false : true と言い切れるわけではないと思います。
実際のところどうなのでしょうか?ご教授よろしくお願い致します。
追記です。
「resultの参照値が切り替わる可能性がある」については以下のコードを実行した際に思いつきました。↓↓↓
String s = "moji";
String str = "moji";
System.out.println(str == s); //true
上記のコードのように同一の文字列"moji"をstrに代入した場合は"moji"のインスタンスが新たに生成され、sとstrの参照値が異なるものになるのではないか?と思ったのですが結果はtrueとなり、別々に生成したものなのに参照値が同じであることに気づいたからです。
回答2件
あなたの回答
tips
プレビュー