[Java]String.intern() を実験
String.intern()について、ちょっと実験をしてみた。
定数(つまり文字リテラル)として作成されたStringと、String(char[])で後から作成したStringを用意し、定数の内容をリフレクションで書き換えてみた。
static final String STR = "aaa";
String str = new String(new char[]{'a', 'a', 'a'});
定数書き換え後に後から作成した文字列の方をinternすると、自分自身が返ってきた。
- 書き換え前の定数値は、VMのプールから削除されているらしい
- 後から作成した文字列strをinternしても、定数のインスタンスと混同されたりしない
- STRの値を
"aaa"
から"aab"
に書き換えたとすると、STR.intern()
は、他の場所にあった"aab"
のインスタンスを返してくる
やっぱりVMはちゃんと考えて実装してある。intern()の処理が遅いのもちょっと納得。
ラベル: Java
0 件のコメント:
コメントを投稿
登録 コメントの投稿 [Atom]
<< ホーム