2006/10/26

[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()の処理が遅いのもちょっと納得。

ラベル:

0 件のコメント:

コメントを投稿

登録 コメントの投稿 [Atom]

<< ホーム