public String intern()返回字符串对象的规范化表示形式。
一个初始为空的字符串池,它由类 String 私有地维护。
当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(用 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并返回此 String 对象的引用。
它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。
所有字面值字符串和字符串赋值常量表达式都使用 intern 方法进行操作。字符串字面值在 Java Language Specification 的 §3.10.5 定义。
返回:
一个字符串,内容与此字符串相同,但一定取自具有唯一字符串的池。
参考资料:JDK1.6帮助文档
String intern方法是查询String pool中是否有内容相等的值,如果有,则返回String pool中得字符的引用,如果没有,则将该String置于String pool中。
我的困惑是:什么情况下,String pool会没有该String内容相同的字符呢?
1.比如: String x = "abc";则String pool中有“abc”
2. String y = new String("abc");String pool中,也是有“abc"的。
找不到一种情况,String pool中,不存在一个非空String引用没有对应的String pool的情况。
非常量的就是,比如
StringBuilder sb = ...
sb.append('x').append('y');
String s = sb.toString();
这个s就不在pool里面
如果你使用了
char data[] = {'a', 'b', 'c'};
String str = new String(data);
构建了一个String 对象,则在Strint pool中是没有的对应的字符串的。需要通过intern来将该对象放置与string pool中。其余直接涉及的string literal都会在string pool中有一个内容相同的。
分享到:
相关推荐
这篇文章将要讨论 Java 6 中是如何实现 String.intern 方法的,以及这个方法在 Java 7 以及 Java 8 中做了哪些调整。
java中String类的intern、split方法的详细讲解。
关于String.intern()方法,这个问题都被问烂了,有的文章在分析的时候还在用jdk1.7,jdk1.8之后内存模型发生了变化,内存的变化也会影响intern方法的执行,这里有必要写文章分析一下,请大家务必从头开始看,这样...
那么String.intern的性能怎么样呢?我们一起来看一下。 String.intern和G1字符串去重的区别 之前我们提到了,String.intern方法会返回字符串常量池中的字符串对象的引用。 而G1垃圾回收器的字符串去重的功能其实和...
本文将给大家详细介绍关于C#字符串优化String.Intern、IsInterned的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 首先看一段程序: using System; class Program { static void ...
深入理解JavaString#intern()内存模型Java开发Java经验技巧共4页.pdf.zip
pos文件是ProcessOn的源文件,可以导入后直接打开编辑。 内容是:不同jdk版本下对String的intern()的分析
深入理解 Java String#intern() 内存模型.docx
主要给大家介绍了关于java String中intern的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
主要介绍了Java String的intern用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
本文主要介绍java 中String 的intern方法,这里主要通过实例来说明不同版本的JDK,intern方法的对比,有需要的小伙伴可以参考下
如果不是用双引号声明的String对象,可以使用String提供的intern方法。intern方法会从字符串常量池中查询当前字符串是否存在,若不存在就会将当前字符串放入常量池中。 在Java中,字符串常量池存在于方法区中。方法...
大家知道,Java中string.intern()方法调用会先去字符串常量池中查找相应的字符串,如果字符串不存在,会在字符串常量池中创建该字符串然后再返回。 字符串常量池是一个固定大小的HashMap,桶的数量默认是1009, ...
受此问题的启发而被关闭:“ API请求:string.Intern(ReadOnlySpan ...)” 共享池已设置上限; 具有第二代LRU驱逐,以及第二代GC集合的进一步驱逐。 使用示例 馆藏 using Ben . Collections ; array = array . ...
String.intern()原理 String.intern()是一个Native方法,底层调用C++的 StringTable::intern 方法,... public static void main(String args[]) { String s1 = new StringBuilder().append("String").append
主要介绍了通过String.intern()方法浅谈堆中常量池,在JDK7之前,字符串常量是存在永久带Perm 区的,JDK7开始在将常量池迁移到堆中,这个变化也导致了String的新特性,下面我们慢慢进行介绍。,需要的朋友可以参考下
ISDN是一种非常好的技术,但因为市场等方面的原因并未有很好的发展。在INTERNET大发展时,由于它能提供较高的访问速度,一度受到青睐,装机容量有较大的发展。作为一种实用的技术,在目前的网络中仍占有一定的地位。...
一些jar包和spring,ajax的配置信息,参考价值不高