【发布时间】:2011-07-01 00:03:44
【问题描述】:
两个问题。
当我们声明字面量字符串时,我们会在堆的字符串池中查找是否有相同的字符串。 这也是实习(
String类的方法实习生)吗?在我看来,每个文字字符串声明都需要二进制搜索或其他东西,因此当 n 是现有字符串的数量时,它至少花费 log(n)在游泳池。如果池中有很多字符串,则可能成本很高。 (也许是搜索成本和内存的权衡?)从这个角度来看,声明 mant 文字字符串可能很危险。 这种搜索成本有多重要以及为什么以这种方式设计 java(在声明文字字符串时搜索池)。
以下是我所说的了解背景。
JavaDoc for the java.lang.String class 声明:
字符串是常量;它们的值在创建后无法更改。字符串缓冲区支持可变字符串。因为 String 对象是不可变的,所以它们可以被共享。
http://www.janeg.ca/scjp/lang/strLiteral.htmlcmets:
换句话说,因为编译器知道字符串的原始值一旦创建就不能更改,它可以安全地使用现有数据并避免因重复而导致内存混乱。
【问题讨论】:
-
我将您对“JSK 1.3”的引用修改为官方 JavaDoc。
-
@joachim Sauer 谢谢,但最后一句话来自您删除的 (janeg.ca/scjp/lang/strLiteral.html)。你能反映一下吗?或者我会的。
-
我删除了它,因为我上面链接的 JavaDoc 是引用的权威原始来源,并且该页面的质量有问题(没有“JSK 1.3”之类的东西,它实际上并不链接到它的任何来源)。
-
@Joachim Sauer 哦.. 我知道,但我的意思是从 换句话说 开始的最后一个阶段。这句话可能是网站所有者(janeg.ca..)写的,所以我认为最好注意这一点。
标签: java performance search string-literals string-interning