JavaでStringを生成する時はnew生成をやめようね!!という話。

JavaでStringを生成する時はnew生成をやめようね!!という話。

String s  = new String("0123456789");

という書き方の話。

なぜ書くのか

String a1 = "Hoge";  

String型を宣言するときにこういう書き方をしていたが、最初のnewする書き方と何が違うのか気になったので調べてみると違うものとして扱われてたのでメモ。

調査でどういう結論に至ったのか

String s  = new String("0123456789");

という書き方は通常のオブジェクト同様にヒープ領域にインスタンスを作成する。

対して、

String a1 = "Hoge";  
String a2 = "Hoge";

この書き方は定数として定数プールに保存される。
あえてnew Stringを使う明確な理由がない限り、Stringを変数に設定する場合は、

String str = "Hoge";

というようにリテラルを直接指定し、new Stringは使わないのがセオリーとなる。
そうすればStringオブジェクトを必要最低限で済ませることができ、メモリにもまたパフォーマンス的にもよい結果となる、らしい。

ちなみに文字列を作成した場合、JVMはまず最初に定数プールを見に行き、もし定数プールに同様の文字列が存在する場合には同じ参照を与える。
String型が不変の理由もここら辺にありそう。

それはまた別の記事で調べたいときに書きます。

今回は以上。

コメント

このブログの人気の投稿

Braveブラウザの同期機能をiPhoneで設定した話。

failed: unable to get local issuer certificate (_ssl.c:1123)と出たので解決した話

自作のChrome Extensionをインポートした時に "Invalid value for 'content_scripts[0].matches[0]': Empty path."というエラーが出たので解決した