以下代碼段實施一個字符串。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時,您正在運行一個包含這兩個片段的程序? –