以下代码段实施一个字符串。Java中的实习字符串
String str1="my";
String str2="string";
String concat1=str1+str2;
concat1.intern();
System.out.println(concat1=="mystring");
表达concat1=="mystring"
返回true
因为concat1
已经实习。
如果作为显示在下面的代码段中的给定的字符串mystring
改变为string
。
String str11="str";
String str12="ing";
String concat11=str11+str12;
concat11.intern();
System.out.println(concat11=="string");
比较表达concat11=="string"
返回false
。由concat11
持有的字符串似乎没有被执行。我在这里忽略了什么?
我对Java 7的测试,更新11
编辑:
整个代码:
package test;
public final class Test
{
public static void main(String... args)
{
String str11="my";
String str12="string";
String concat11=str11+str12;
concat11.intern();
System.out.println(concat11=="mystring");
String str1="str";
String str2="ing";
String concat1=str1+str2;
concat1.intern();
System.out.println(concat1=="string");
}
}
注意上面做实习生的字符串,但你折腾掉实习版本。如果您打算立即使用它,则必须保存实习生函数调用的结果。 –
'String.intern()'*返回*实参版本。它永远不会改变原始字符串(即'concat1'),因为字符串在Java中是不可变的。无论哪种方式,使用'equals'作为字符串比较(除非你有非常有说服力的理由来使用'intern')。 –
您能否澄清一下,当您看到'concat11'返回false时,您正在运行一个包含这两个片段的程序? –