`
llystar
  • 浏览: 63900 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

public String intern()

 
阅读更多
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中有一个内容相同的。



分享到:
评论

相关推荐

    String.intern – 字符串池

    这篇文章将要讨论 Java 6 中是如何实现 String.intern 方法的,以及这个方法在 Java 7 以及 Java 8 中做了哪些调整。

    String类的intern、split方法

    java中String类的intern、split方法的详细讲解。

    jdk1.8之后的String.intern()方法内存分析

    关于String.intern()方法,这个问题都被问烂了,有的文章在分析的时候还在用jdk1.7,jdk1.8之后内存模型发生了变化,内存的变化也会影响intern方法的执行,这里有必要写文章分析一下,请大家务必从头开始看,这样...

    JVM系列之String.intern的性能解析

    那么String.intern的性能怎么样呢?我们一起来看一下。 String.intern和G1字符串去重的区别 之前我们提到了,String.intern方法会返回字符串常量池中的字符串对象的引用。 而G1垃圾回收器的字符串去重的功能其实和...

    C#中字符串优化String.Intern、IsInterned详解

    本文将给大家详细介绍关于C#字符串优化String.Intern、IsInterned的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 首先看一段程序: using System; class Program { static void ...

    深入理解JavaString#intern()内存模型Ja

    深入理解JavaString#intern()内存模型Java开发Java经验技巧共4页.pdf.zip

    不同jdk版本下对String的intern()的分析.pos

    pos文件是ProcessOn的源文件,可以导入后直接打开编辑。 内容是:不同jdk版本下对String的intern()的分析

    深入理解 Java String#intern() 内存模型.docx

    深入理解 Java String#intern() 内存模型.docx

    关于java String中intern的深入讲解

    主要给大家介绍了关于java String中intern的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    Java String的intern用法解析

    主要介绍了Java String的intern用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    java String的intern方法

    本文主要介绍java 中String 的intern方法,这里主要通过实例来说明不同版本的JDK,intern方法的对比,有需要的小伙伴可以参考下

    string常量池和intern_韩雅茹Java系列2021.pdf

    如果不是用双引号声明的String对象,可以使用String提供的intern方法。intern方法会从字符串常量池中查询当前字符串是否存在,若不存在就会将当前字符串放入常量池中。 在Java中,字符串常量池存在于方法区中。方法...

    深入理解Java String#intern()内存模型

    大家知道,Java中string.intern()方法调用会先去字符串常量池中查找相应的字符串,如果字符串不存在,会在字符串常量池中创建该字符串然后再返回。  字符串常量池是一个固定大小的HashMap,桶的数量默认是1009, ...

    Ben.StringIntern:字符串缓存以合并重复的字符串; 限制了第二代LRU驱逐以及Gen2 GC集合的进一步驱逐

    受此问题的启发而被关闭:“ API请求:string.Intern(ReadOnlySpan ...)” 共享池已设置上限; 具有第二代LRU驱逐,以及第二代GC集合的进一步驱逐。 使用示例 馆藏 using Ben . Collections ; array = array . ...

    浅谈Java String内幕(下)

    String.intern()原理  String.intern()是一个Native方法,底层调用C++的 StringTable::intern 方法,...  public static void main(String args[]) {  String s1 = new StringBuilder().append("String").append

    通过String.intern()方法浅谈堆中常量池

    主要介绍了通过String.intern()方法浅谈堆中常量池,在JDK7之前,字符串常量是存在永久带Perm 区的,JDK7开始在将常量池迁移到堆中,这个变化也导致了String的新特性,下面我们慢慢进行介绍。,需要的朋友可以参考下

    网络互联与intern技术课件

    ISDN是一种非常好的技术,但因为市场等方面的原因并未有很好的发展。在INTERNET大发展时,由于它能提供较高的访问速度,一度受到青睐,装机容量有较大的发展。作为一种实用的技术,在目前的网络中仍占有一定的地位。...

    intern project

    一些jar包和spring,ajax的配置信息,参考价值不高

Global site tag (gtag.js) - Google Analytics