Этот вопрос задавался много раз в 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");
}
занимает около 399 372 наносекунды.
for (int j = 0; j < 1000; j++) {
String s = "hello World";
}
занимает около 23 000 наносекунд.
Почему так много улучшений производительности? Существует ли какая-либо оптимизация компилятора внутри?