这个问题在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纳秒左右。
为什么性能有如此大的提升?是否有内部发生了编译器优化?