A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小强皮厚 于 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        
}}
所以这个方法到底是个啥?

1 个回复

倒序浏览
举个例子
String str = "123";
调用str.intern()的时候,就是检查常量池中是否有"123".
如果有就返回"123"的引用.
没有的话就在常量池中增加"123"并且返回"123"的引用.

来源:http://bbs.csdn.net/topics/190153906
13楼
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马