当String.intern()遇见字符串拼接

String.intern()方法的作用是:判断字符串常量池中是否存在一个引用,这个引用指向的字符串对象和当前对象相等(使用 equals 方法判断相等),如果存在直接返回这个引用,如果不存在则创建一个字符串对象并将其引用存入字符串常量池。JDK对其解释如下:

我们先来简单测试下:

现在看起来都符合我们预期,现在我们稍微改动下:

现在结果会有人迷惑,这里其实不仅涉及String.intern(),还涉及了+拼接字符串的优化,本质就是s7会被编译优化成"冰蛙",而s6则不会,我门反编译看下结果:

可见s6是通过StringBuilder的append方法实现拼接,调用toString方法创建一个新的String对象,而s7编译器已经做了优化,直接拼接得到结果。

String.intern()的应用场景

1.构建内存缓存设置对象属性时调用,减小内存开销

2.作为synchronized锁对象

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容