美文网首页
String.intern() Stringbuilder.to

String.intern() Stringbuilder.to

作者: 晓豆_f4c9 | 来源:发表于2020-07-27 11:16 被阅读0次

深入理解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“,所以常量池也存放一个 

相关文章

网友评论

      本文标题:String.intern() Stringbuilder.to

      本文链接:https://www.haomeiwen.com/subject/cwrccxtx.html