StackOverflow上多次询问过这个问题,但没有一个是基于性能的.
在Effective Java书中给出了它
如果
String s = new String("stringette");在循环或频繁调用的方法中发生,则可以不必要地创建数百万个String实例.改进版本只是以下内容:
String s = "stringette";此版本使用单个String实例,而不是每次执行时都创建一个新实例.
所以,我尝试了两者,发现性能有了显着提高:
for (int j = 0; j < 1000; j++) {
String s = new String("hello World");
}
Run Code Online (Sandbox Code Playgroud)
需要大约399 372纳秒.
for (int j = 0; j < 1000; j++) {
String s = "hello World";
}
Run Code Online (Sandbox Code Playgroud)
大约需要23 000纳秒.
为什么会有这么多的性能提升?内部是否有任何编译器优化?