最近、Stringがimmutableなオブジェクトということを知り、
java
1String s1 = "abc"; 2String s2 = "abc"; 3String s3 = new String("abc"); 4 5s1==s2; //true 6s1==s3; //false
↑のようにs1==s2がtrueになる理由がわかりました。
s1==s3がfalseになる理由は、自分で考えた結果、String s1 = "abc";
はどこかでnew String("abc");
が行われていて、
String s2 = "abc";
としたときにはnewされる前にどこかでabcというオブジェクトがあるか探してみて、あったらそれの参照を渡しているが、
String s3 = new String("abc");
は直にコンストラクタを通っているので、等値なオブジェクトを探すことなく、新しいオブジェクトを生み出しているからなんじゃないかという結論に達しました。
それを確かめようと思いリファレンス等を見てみましたがよくわからず、またソースコードを見てみようと思ってもありませんでした。
そこで
0. 上記の私が考えたfalseになる理由は合っているのか
0. 等値のオブジェクトがあるかどうか探すのは、メソッド等でしているのか、はたまた言語仕様(オートボクシングのような感じ?)でなされているのか
0. 標準API等のソースコードを読んでみたいときはどうすればいいのか
以上三点についてお教えいただけると幸いです。よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/06 13:18