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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 象牙 中级黑马   /  2014-8-19 20:59  /  824 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

                String s1="abc";
                String s2=new String("abc");
                String s3="abc";
                System.out.println(s1.intern()==s2.intern());
                System.out.println(s1==s2);
为什么第一个为true  第二个为false

2 个回复

倒序浏览
搞明白了一个初始为空的字符串池,它由类 String 私有地维护。   当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(用 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并返回此 String 对象的引用。   它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。   
回复 使用道具 举报
false 是因为s1在常量池中而s2在堆内存中==比较地址所以fasle; s3和s2引用了同一个地址值地址相同结果为true
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马