`
啸笑天
  • 浏览: 3465510 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

String.intern()解析

    博客分类:
  • java
 
阅读更多

 

String.intern()解析

 

String.intern():
存在于.class文件中的常量池,在运行期被JVM装载,并且可以扩充。String的intern()方法就是扩充常量池的一个方法;当一个String实例str调用intern()方法时,Java查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引用,如果没有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用;看例子就清楚了 

例: 

String s0= "pku"; 
String s1=new String("pku"); 
String s2=new String("pku");

System.out.println(s0==s1); 
System.out.println(); 
s1.intern(); 
s2=s2.intern(); //把常量池中“pku”的引用赋给s2 
System.out.println( s0==s1); 
System.out.println( s0==s1.intern() ); 
System.out.println( s0==s2 );


结果为: 

false 

false //虽然执行了s1.intern(),但它的返回值没有赋给s1 
true //说明s1.intern()返回的是常量池中”pku”的引用 
true

最后我再破除一个错误的理解: 

有人说,“使用String.intern()方法则可以将一个String类的保存到一个全局String表中,如果具有相同值的Unicode字符串已经在这个表中,那么该方法返回表中已有字符串的地址,如果在表中没有相同值的字符串,则将自己的地址注册到表中“如果我把他说的这个全局的String表理解为常量池的话,他的最后一句话,“如果在表中没有相同值的字符串,则将自己的地址注册到表中”是错的: 

看例4: 

String s1=new String("pku"); 
String s2=s1.intern(); 
System.out.println( s1==s1.intern() ); 
System.out.println( s1+" "+s2 ); 
System.out.println( s2==s1.intern() );

结果: 

false 
pku pku 
true

在这个类中我们没有声名一个”pku”常量,所以常量池中一开始是没有”pku”的,当我们调用s1.intern()后就在常量池中新添加了一个”pku”常量,原来的不在常量池中的”pku”仍然存在,也就不是“将自己的地址注册到常量池中”了。 

s1==s1.intern()为false说明原来的“pku”仍然存在; 

s2现在为常量池中“pku”的地址,所以有s2==s1.intern()为true。
分享到:
评论

相关推荐

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

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

    字符串string.zip

    字符串字面量和`String.intern()`方法都涉及到字符串池的概念。 本压缩包的“Chapter15”可能涵盖了以上部分或全部知识点,包括实例演示、上机练习参考答案和课后作业参考答案,为学习者提供了实践和巩固所学的宝贵...

    解析Java中的String对象的数据类型 字符串

    解析Java中的String对象的数据类型字符串 Java中的String对象是一种特殊的数据类型,它不同于基本数据类型,也不同于其他对象。String对象的默认值是null,但它又是一种特殊的对象,有其它对象没有的一些特性。 ...

    全面理解java中的String.doc

    例如,`String s1 = new String("kvill").intern();`,这将使得`s1`指向常量池中的"kvill"。在示例3中,即使对`s1`调用了`intern()`,但由于没有将返回的引用赋给`s1`,`s0 == s1`仍为false,但`s0 == s1.intern()`...

    Java String的intern用法解析

    Java String的intern用法解析 Java String的intern方法是Java中一个非常重要的方法,它可以将字符串常量池中的字符串对象返回给我们。今天,我们将深入探究Java String的intern用法解析,了解它的工作原理和应用...

    MLDN魔乐JAVA_07作业讲解、String.rar

    【标题】"MLDN魔乐JAVA_07作业讲解、String.rar" 提供的是一份关于Java编程语言中String类的教程资料,主要涵盖了作业解析和相关知识点的深入讲解。在Java中,String是一个非常重要的类,它用于处理文本字符串,并在...

    java中Object对象String对象的解析.pdf

    "Java 中 Object 对象和 String 对象的解析" Java 中的 Object 对象和 String 对象是两个非常重要的概念。在 Java 中,每个对象都继承自 Object 对象,这意味着每个对象都拥有 Object 对象的方法和属性。String ...

    Java中的String对象数据类型全面解析

    `String.intern()`方法是`String`的一个重要功能,它会检查常量池中是否存在具有相同Unicode值的字符串。如果存在,就返回该字符串的引用;如果不存在,就会将当前字符串的Unicode值添加到常量池,并返回新添加的...

    深入解析String#internJava开发Java经验

    在Java编程语言中,`String#intern()` 是一个非常重要的方法,它涉及...在阅读“深入解析String#internJava开发Java经验技巧共16页.pdf.zip”这份资料后,开发者可以更全面地掌握这一方法的运用,提升代码质量与效率。

    java常见笔试、面试题深度剖析

    - **`intern()` 方法的作用**:当调用 `string.intern()` 方法时,如果字符串池中已存在一个等于该 `String` 对象的字符串,则返回字符串池中的字符串;否则,将该 `String` 对象添加到字符串池中并返回它的引用。 -...

    java,string类练习题.docx

    在Java编程语言中,String类是一个非常...以上是基于题目中提到的Java String类的相关知识点的解析。在实际编程中,理解并熟练运用这些知识是非常关键的,因为它涉及到字符串的操作、内存管理以及字符串常量池的概念。

    Java中的String池

    这意味着如果使用`new String("Hello").intern()`来创建字符串,那么即使使用`new`关键字创建了一个新的对象,最终也会返回String池中已有的`"Hello"`字符串的引用。 #### 总结 通过以上分析可以看出,在Java中...

    java,string类练习题.pdf

    在上述的java字符串类练习题中,涉及了多个关于String类及其相关概念的知识点,让我们逐一解析: 1. `substring`方法:这个方法用于从原始字符串中截取一部分子串。正确选项是B。`substring(int beginIndex, int ...

    Java中关于String的全面解析

    "Java中的String全面解析" Java中关于String的全面解析主要介绍了Java中关于String全面解析,下面我们来一起学习一下吧。基于字符串String在Java中的地位,关于String的常识性知识就不多做介绍了,我们来看一段代码...

    [jvm]深入JVM(一):从

    java解析CONSTANT_String_info时,java虚拟机必须把一个字符串对象的引用,放到constant pool entry 中。每个java虚拟机维护着一张列表,里面有所有程序被"interned"的字符串对象的引用。 查看constPoolOop.cpp文件 ...

    String和StringBuffer详细用法总结

    根据给定的信息,本文将对`String`与`StringBuffer`在Java中的使用进行详细的解析与对比,并结合实例深入分析二者的异同及其适用场景。 ### `String` 和 `StringBuffer` 的基本概念 #### `String` 在Java中,`...

    后端知识库(八股文大全 没事的时候再看)_20230303012103.docx

    - 运行时常量池:在运行时可动态添加常量,如String.intern()。 - 全局字符串常量池:JVM维护的字符串引用表,使用Hashtable实现,存储字符串实例的引用。 - 基本类型包装类对象常量池:Byte、Short等基本类型...

Global site tag (gtag.js) - Google Analytics