这个问题在 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");
}
大约需要399 372纳秒。
for (int j = 0; j < 1000; j++) {
String s = "hello World";
}
大约需要23 000纳秒。
为什么会有这么大的性能提升?里面有没有编译器优化?