String#intern结果对比源码测试

/**
 *返回字符串对象的规范表示。 最初为空的字符串池由String类String 。 
 *当调用intern方法时,如果池已经包含与equals(Object)方法确定的相当于此String对象的字符串,则返回来自池的字符串。否则,此String对象将添加到池中,并返回对此String对象的引用。
 *由此可见,对于任何两个字符串s和t , s.intern() == t.intern()是true当且仅当s.equals(t)是true 。
 */
// 如果池已经包含与equals(Object)方法确定的相当于此String对象的字符串,则返回来自池的字符串
String bb = "b";
String b = new String("b");
String bbb = b.intern();
// 93122545
System.err.println(System.identityHashCode(b));
// 2083562754
System.err.println(System.identityHashCode(bb));
// 2083562754
System.err.println(System.identityHashCode(bbb));

// 否则,此String对象将添加到池中,并返回对此String对象的引用。
String a = new String("a");
String aa = a.intern();
String aaa = "a";
// 488970385
System.err.println(System.identityHashCode(a));
// 1209271652
System.err.println(System.identityHashCode(aa));
// 1209271652
System.err.println(System.identityHashCode(aaa));

上一篇:动态DP(DDP)学习笔记


下一篇:详解String的intern方法