【发布时间】:2013-11-28 00:22:15
【问题描述】:
final String string1 = "somestring1";
for (int i = 0; i < 30; i++) {
final String string2 = "somestring2";
if (string2.equals(string1)) { // Using variable
// do stuff
}
}
for (int i = 0; i < 30; i++) {
final String string2 = "somestring2";
if (string2.equals("somestring1")) { // Not using variable
// do stuff
}
}
实际上哪个会更快?
1)第一个将其保存为变量并使用该变量直到循环完成。
2) 第二个每次都会生成一个新的字符串,不是吗?
这只是一个例子,在我的例子中毫秒很重要。
提前致谢。
【问题讨论】:
-
#2 不会每次都创建新字符串,但每次都必须检查池并检索实习生。见字符串实习:en.wikipedia.org/wiki/String_interning
-
@Radiodef:是什么让您认为每次都必须查找被实习的字符串?
-
@LouisWasserman 我已经读过几个地方了。为什么不需要找回来? JLS 声明字符串文字是通过
String#intern方法进行实习的,该方法的文档指定查询池。 -
它不必被检索,因为当类加载时字符串被实习一次,之后它只是成为实习池中字符串的固定指针。