黑马程序员技术交流社区
标题:
[石家庄校区]关于String的intern()方法
[打印本页]
作者:
小强皮厚
时间:
2017-11-25 15:57
标题:
[石家庄校区]关于String的intern()方法
本帖最后由 小强皮厚 于 2017-11-25 16:01 编辑
public class Test {
public static void main(String[] args) {
//true
String s1 = new StringBuilder("计算机").append("软件").toString();
System.out.println(s1.intern()==s1);
//false
String s2 = new StringBuilder("ja").append("va").toString();
System.out.println(s2.intern()==s2);
}
}
在网上看到的一个题,感觉java是关键字,所以 s2 会是false,
结果查了一下更乱了
intern
public
String
intern
()返回字符串对象的规范化表示形式。 一个初始为空的字符串池,它由类 String 私有地维护。
当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(用
equals(Object)
方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并返回此 String 对象的引用。
它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。
所有字面值字符串和字符串赋值常量表达式都使用 intern 方法进行操作。字符串字面值在
Java Language Specification
的 §3.10.5 定义。
返回:
一个字符串,内容与此字符串相同,但一定取自具有唯一字符串的池。
又测试了几个
public class Test01 {
public static void main(String[] args) {
// String s1 = "zhang";
// System.out.println(s1.intern()==s1);
// true
// String s1 = new String("zhang");
// System.out.println(s1.intern()==s1);
// false
// String s1 = new StringBuilder("zhang").toString();
// System.out.println(s1.intern()==s1);
// false
// String s1 = new StringBuilder("zhang").append("sen").toString();
// System.out.println(s1.intern()==s1);
// true
}
}
所以这个方法到底是个啥?
作者:
仙锄
时间:
2017-11-27 00:26
举个例子
String str = "123";
调用str.intern()的时候,就是检查常量池中是否有"123".
如果有就返回"123"的引用.
没有的话就在常量池中增加"123"并且返回"123"的引用.
来源:
http://bbs.csdn.net/topics/190153906
13楼
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2