この質問はStackOverflowで何度も聞かれましたが、パフォーマンスに基づくものはありませんでした。
効果的なJavaの本では、
ループまたは頻繁に呼び出されるメソッドで発生する場合
String s = new String("stringette");
、何百万ものStringインスタンスが不必要に作成される可能性があります。改善されたバージョンは次のとおりです。
String s = "stringette";
このバージョンは、実行されるたびに新しいインスタンスを作成するのではなく、単一のStringインスタンスを使用します。
そこで、両方を試してみたところ、パフォーマンスが大幅に向上していることがわかりました。
for (int j = 0; j < 1000; j++) {
String s = new String("hello World");
}
約399372ナノ秒かかります。
for (int j = 0; j < 1000; j++) {
String s = "hello World";
}
約23000ナノ秒かかります。
なぜこれほどパフォーマンスが向上するのですか?内部でコンパイラの最適化が行われていますか?