黑马程序员技术交流社区

标题: 关于String intern [打印本页]

作者: 象牙    时间: 2014-8-19 20:59
标题: 关于String intern
                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


作者: 象牙    时间: 2014-8-19 21:06
搞明白了一个初始为空的字符串池,它由类 String 私有地维护。   当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(用 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并返回此 String 对象的引用。   它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。   
作者: LoveJava8    时间: 2014-8-19 22:52
false 是因为s1在常量池中而s2在堆内存中==比较地址所以fasle; s3和s2引用了同一个地址值地址相同结果为true




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2