String.intern() Stringbuilder.to

2020-07-27  本文已影响0人  晓豆_f4c9

深入理解JVM 一书中的  Stringbuilder.toString().intern() 判断

最近闲来无事翻阅这本书的时候,关于JDK1.7版本中字符串常量池的部分的demo有点云里雾里的。后来研究了一下,总结如下

1、String str = new StringBuilder("aa").toString();

System.out.println(str.intern() == str); // 这个返回false 因为创建str 的过程中,在请求参数中已经创建了"aa" ,至此常量池中有了,后面的toString()查看源码发现,创建了新对象。这个地方就和原先的不一样了,

 @Override

public String toString() {

// Create a copy, don't share the array

    return new String(value, 0, count);

}

// 同理 下面的也因为上面已经创建了,toString的时候又创建了新的对象,导致还不通

2、String str1 = new StringBuilder("a").append("a").toString();

System.out.println(str1.intern() == str1); // 这个返回 false

3、如果在一个类代码里面,第一次创建这个对象的数值,则为true

String a =new StringBuilder().append("ja").append("va").toString();

System.out.println(a.intern() == a);// true 两次append 之后toSting ,因为之前没有这个”java“,所以常量池也存放一个 

上一篇 下一篇

猜你喜欢

热点阅读