Jor*_*lla 19 java string specifications effective-java
我知道你是否做到了
for (condition) {
String s = "hi there";
}
Run Code Online (Sandbox Code Playgroud)
只是一个String
实例在所有的迭代创建的,不像String s = new String("hi there");
是会在每次迭代中创建一个新的实例.
但是,阅读约书亚布洛赫的有效Java:第2章第5章(第20页),它指出:
此外,保证对象将被在同一虚拟机中运行的任何其他代码重用,这些代码恰好包含相同的字符串文字[JLS,3.10.5].
不说的AFAIK 恰好是相同的字符串文字,它说包含.
阅读[JLS,3.10.5]无法找到任何确切的参考,我有一个疑问.
给这个片段:
String s1 = "hi ";
String s2 = "there";
String s3 = "hi there";
Run Code Online (Sandbox Code Playgroud)
创建了多少个实例?
s1
然后s2
(然后s3
创建重用s1
和s2
引用)Joa*_*uer 16
JLS不保证任何子字符串的重用.这里的"包含"只是意味着该类在某处提到完全相同的字符串文字.它不用于"子串"意义上.