`
RocCheung
  • 浏览: 1243 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

String类之intern()

阅读更多
API说明部分:
When the intern method is invoked, if the pool already contains a string equal to this String object as determined by the equals(Object) method, then the string from the pool is returned. Otherwise, this String object is added to the pool and a reference to this String object is returned.

测试1:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
String abc = "test1";
String bcd = "test2";
String t1 = abc + bcd;
String t2 = abc + bcd;

System.out.println(t1.equals(t2));
System.out.println(t1 == t2);


执行结果:true、false。
表明它们只是字面值相同,实际内存地址并不相同。
而且表明虚拟机不会自动替你完成把字符串加入到字符串常量池的功能。
在内存中,还是生成了两个对象。t1和t2
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

测试2:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
String abc = "test1";
String bcd = "test2";
String t1 = abc + bcd;
String t2 = abc + bcd;

System.out.println(t1.equals(t2));
System.out.println(t1 == t2);

t1.intern();
t2 = t2.intern();

System.out.println(t1.equals(t2));
System.out.println(t1 == t2);

执行结果:true、false、true、false
虽说t1执行了所谓的“扣留”操作,但是并未接受字符串常量池返回的引用对象,导致t1和t2实际的内存地址还是不一样的。
结论:intern()方法如果本身未接受池中返回的对象引用,方法不会更改对象的引用。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

测试3:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
		String abc = "test1";
		String bcd = abc;
		bcd = bcd.intern();
		
		System.out.println(abc == bcd);


虚拟机默认会把初始化声明的String对象注册到常量池中,当其它字符串.equals(abc)相等时,并调用intern()方法接收返回值,则两个对象的内存地址也将一样,因为引用的都是同一对象地址
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

基础知识,不容忽视!!!
分享到:
评论

相关推荐

    String类的intern、split方法

    String类的intern、split方法 String 类的 intern 方法是一个本地方法,定义如下:public native String intern();该方法返回一个字符串对象的内部化引用,由 String 类维护一个初始为空的字符串的对象池,当 ...

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

    C#中字符串优化String.Intern、IsInterned详解 C#中字符串优化是指在编程过程中对字符串进行优化,以减少内存占用和提高程序运行效率。在C#中,字符串是一种特殊的数据类型,它既是基元类型又是引用类型。在编译和...

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

    "深入理解 Java String#intern() 内存模型" Java String#intern() 内存模型是 Java 语言中一个重要的概念,.string#intern() 方法是 Java 字符串常量池中一个重要的组件。字符串常量池是一个固定大小的 HashMap,桶...

    java String类的实现

    Java中的`String`类是编程中最常用的类之一,它在Java的`java.lang`包中,无需显式导入即可使用。`String`类代表不可变的字符序列,这意味着一旦创建了`String`对象,它的值就不能改变。这个特性使得`String`在处理...

    关于java String中intern的深入讲解

    intern 方法是 Java String 类中的一个native 方法,它的主要作用是将字符串对象存储在字符串常量池中,以便重复使用相同的字符串对象。intern 方法会检查字符串常量池中是否已经存在一个与当前字符串对象相同的字符...

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

    在Java编程语言中,`String`类是极其重要的,它提供了许多用于操作字符串的方法,其中之一便是`intern()`。深入理解`String#intern()`方法对于优化内存使用和理解Java的内存模型至关重要。`intern()`方法是一个非常...

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

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

    正确使用String类的几点注意

    在Java编程中,`java.lang.String`类是极为常见的基础数据类型之一,其重要性和应用范围不言而喻。为了更好地理解和使用String类,本文将从几个关键方面入手,探讨如何更加高效、合理地使用String对象。 #### 一、...

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

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

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

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

    深入理解JVM实战篇-String类1

    在Java编程中,String类是使用最频繁的类之一,它涉及到许多底层机制,特别是与JVM(Java虚拟机)的交互。本文将探讨String类的一些关键特性,包括字面量与运行时常量池、String的intern()方法以及它们如何影响内存...

    Java String的intern用法解析

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

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

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

    jdk6-8String类

    在Java编程语言中,`String`类是使用最频繁的类之一,它代表不可变的字符序列。在JDK的不同版本中,`String`类经历了一些优化和改进,尤其是在性能和内存管理方面。这里我们将对JDK 1.6、1.7和1.8中的`String`类进行...

    String类简介

    在Java编程语言中,`String`类是使用最频繁的类之一,它代表不可变的字符序列。本文将深入探讨`String`类的基本概念、特性、常见操作以及与其他数据类型的关系,帮助你更好地理解和运用这一核心类。 首先,`String`...

    java String的intern方法

    Java中的`String`类的`intern()`方法是一个非常有趣且重要的功能,它涉及到字符串的内存管理,特别是字符串常量池。常量池是Java虚拟机(JVM)的一部分,存储预编译的字符串字面量和其他常量。`intern()`方法的作用...

    Java 中 String 类的常用方法

    Java中的String类提供了丰富的字符串操作方法,这些方法覆盖了字符串的创建、修改、比较、查找以及格式化等多个方面,极大地方便了Java程序中对字符串的处理。 1. `charAt(int index)`方法用于返回字符串中指定索引...

Global site tag (gtag.js) - Google Analytics