java
1String s1 = "abc"; 2String s2 = "abc"; 3String s3 = "a" + "b" + "c"; 4String s4 = "ab"; 5s4 += "c";
この文字列リテラル全てを"=="で比較したところ、s1, s2, s3を比較した場合は、全てtrueだったのに対して、s4を他のs1, s2, s3と比較するとfalseになってしまいました。
s4においても文字列の内容は他のs1, s2, s3と同じであるのに、偽になってしまうのかがわかりません。
"+="を用いると、StringBuilderのappendが内部で呼ばれることはわかっています。
このappendが内部で呼ばれることによって、オブジェクトを参照するアドレスが変わってしまうから偽になってしまうのでしょうか。
また、もしそうであるとしたら、s3では"+"を用いているので、ここでも新しいStringオブジェクトが生成されています。これは、Stringオブジェクトだから文字列リテラルにおいては問題はないということでしょうか。
equalsメソッドを使えば、こんなことを考えなくてもいいことはわかっています。
しかし、わからなくて、もやもやしてます。
お時間のある方、ぜひご教授ください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/09 08:43
2016/09/09 14:48
2016/09/09 17:09