站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题关于字符串扣留

关于字符串扣留

摘要: 关于字符串扣留


public class StringTest {
public static void stringCompare(){
String str1="to";
String str3="many";
str1=(str1+str3).intern();//注意,写+=的结果为不相等
String str2="tomany";
if(str1==str2){
System.out.println("相等");
}
else{
System.out.println("不相等");
}
String str4=new String("haha");
String str5=new String("haha");
str5=str5.intern();
if(str5==str4){
System.out.println("相等");
}
else{
System.out.println("不相等");
}

}
public static void main(String[] args) {
StringTest.stringCompare();
}
}
为什么第一个的输出结果是相等(就是字符串扣留成功),第二个为什么结果是不相等,str5与str4所指的字符串内容相同,按照扣留规则,不是应该将str5所指的字符串销毁马,然后用str5指向str4指向的字符串马?具体有什么不同,麻烦大家给我讲讲啊,急等,谢谢


str5与str4是你new出来的两个不同的对象,str5.intern()与str4当然不可能相等


intern
public String intern()返回字符串对象的规范化表示形式。
一个初始时为空的字符串池,它由类 String 私有地维护。

当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并且返回此 String 对象的引用。

它遵循对于任何两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。

所有字面值字符串和字符串赋值常量表达式都是内部的。字符串字面值在《Java Language Specification》的 §3.10.5 中已定义。


返回:
一个字符串,内容与此字符串相同,但它保证来自字符串池中。



楼主一个是在调用intern()方法 后 生成新的对象字符串。
而另一个是在调用intern()方法 前 生成新的对象字符串。
两者不一样


↑返回目录
前一篇: java中日期计算问题-求解---请帮帮忙
后一篇: String 转换成 XML 问题请教