以下代码段将字符串变量设为内部变量。
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()
方法返回的是字符串的内部版本。由于Java中的字符串是不可变的,因此它永远不会更改原始字符串(即concat1
)。无论如何,使用equals
进行字符串比较(除非您有非常有说服力的理由使用intern
)。 - Mattias Buelensconcat11
返回false时,你是否运行了包含这两个片段的程序? - Dawood ibn Kareem