Java Silverの問題で分からない箇所があるので教えてください。
写真の問題の7行目は、4行目のプール内の文字列str2を参照すると答えに書かれています。7行目はstr1==str3なので3行目と5行目のstr1とstr3を見るのだと思っていました。なぜstr1==str3なのにstr2を参照してるか見るんですか?
また、8行目がどのようになるかも教えてほしいです。
よろしくお願い致します。
解答です。
こちらの質問が複数のユーザーから「調査したこと・試したことが記載されていない質問」という指摘を受けました。
Stringの比較が==な時点で結果は見えてると思います。
ただ、実際のコードを書いて実行してみては。
BronzeでもSilverでもGoldでも問題集や参考書読んでるだけでは身に付きませんし、意味ないかと。
別の解答を見ているのでは?
見てる解答は合ってます。解答の写真も追加しました。
4 行目が終わった時点で str1 と str2 は別の場所を指します。
ただし str2 は定数なので文字列プールに入れられ、次回同じ文字列がリテラルで参照された場合、新しく文字列を作るのではなく、プール内の既存の文字列が返されます。
intern は文字列をプールに入れるメソッドであり、プールの中に既に同じ文字列がある場合にはそれを返します。
ここで str2 が既にあるので、str3 にはプール内の str2 が返され、同じ参照を指します。
== は文字列の値ではなく参照が同じかどうかを判定するもので、この場合 str2 と str3 がプール内の同じものなので true になります。
str1 は new で作ったもので、その参照は自動更新されないため、違うものになります。
全部解答で解説されているようですが。
「オブジェクトを指す変数」と「オブジェクト自体」とを区別出来る必要があります。
解決したのならベストアンサーを決めるか「自己解決」をしてください。
