前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JVM 《四 JVM 中的String》

JVM 《四 JVM 中的String》

作者头像
邹志全
发布2020-02-25 16:25:08
4670
发布2020-02-25 16:25:08
举报
文章被收录于专栏:EffectiveCodingEffectiveCoding

String 这样的量,在我们的认知中是比较特别的。 其中String 是个对象,然后String也可以是个普通的字面量。在每代JDK中对String 的处理也是不同的,本篇的篇幅不大,仅仅觉着String有意思,所以拿出来说。 先说几个常见的问题 比如String tempStr=“123”+“456”; 这句话在编译的过程中就已经是一个字符串了,俗称的编译优化??? String字面量跟String 对象的存放位置是不同的,一个是在堆上,一个在常量池。 所以有时候会产生这样的情况:String abc=“123”;String acb=“123”;String bca=“123”;……取到的是一个对象,但是当我们去new 一个对象时必定是产生一个对象的而不是先检查常量池。 除此之外还有一个方法叫做intern 这个是一个native方法,作用很简单,检查常量池中是否有该字符串量,若没有向常量池中复制一份。 JDK API文档中对intern()方法的描述是: 返回字符串对象的规范化表示形式。 一个初始为空的字符串池,它由类 String 私有地维护。 当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(用 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并返回此 String 对象的引用。 它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。 所有字面值字符串和字符串赋值常量表达式都使用 intern 方法进行操作。 然后来回说这个常量池,感觉这么说太抽象了,其实说白了就是一个方便查找的存放常量的池子,结构类似于HashMap。 这一个很简洁,就这么多~ 其实跟JVM 并没什么关系,就是想说说 // todo 合并Java 版中的String

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档