假设我需要从Java哈希映射中迭代检索相同键的值。
for(int i=0; i<INTEGER.MAX; i++)
map.get("KEY");
在这种情况下,每次调用map.get(“KEY”)时都会创建“KEY”字符串吗?我想知道是否总是更好地拥有一个String常量,或者无关紧要。
答案 0 :(得分:4)
没有。字符串常量是自动实现的,因此任何相同的字符串文字都引用内存中的同一个对象。
有关此问题的更多信息:http://www.xyzws.com/Javafaq/what-is-string-literal-pool/3
这方面的一个例子:
String s1 = "Test";
String s2 = "Test";
String s3 = new String("Test");
s1 == s2;//Evaluates to true, because they are the same object (both created with string literals)
s1 == s3;//Evaluates to false, because they are different objects containing identical data
答案 1 :(得分:2)
是/否答案取决于您如何创建字符串对象。以下是我现在能想到的四种情景。
是案例
无案例
答案 2 :(得分:1)
是&#34; KEY&#34;每次调用map.get(&#34; KEY&#34;)时都会创建字符串?
没有
Java Strings是不可变的,它允许Java编译器对所有字符串文字使用单个实例。 即:程序中所有相同的字符串文字都将引用单个字符串对象。
在极少数情况下,您需要将相同的字符串包装在两个单独的对象中,您必须明确指出 实例化一个String对象:
String s1 = "bla";
String s2 = "bla";
// s1 == s2
String s3 = new String ("bla");
// s1 != s3