黑马程序员技术交流社区

标题: [石家庄校区]关于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,
结果查了一下更乱了
internpublic 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