Java 中的字符串池
字符串池是 Java 堆中的一个存储区域。它是 Java 虚拟机存储字符串的特殊内存区域。
本教程解释并演示了 Java 中的字符串池。
Java 中的字符串池
字符串池用于提高性能并减少内存开销。
字符串分配对时间和内存的成本很高,因此 JVM 在初始化字符串的同时执行一些操作以降低这两种成本。这些操作是使用字符串池执行的。
每当一个字符串被初始化时,Java 虚拟机都会首先检查池,如果初始化的字符串已经存在于池中,它会返回一个对池化实例的引用。如果初始化的字符串不在池中,则会在池中创建一个新的字符串对象。
下图演示了 Java 堆中字符串池的概览。
这是字符串池如何工作的分步过程;让我们以上面的图片为例。
当类被加载时,Java 虚拟机开始工作。
- JVM 现在将查找 Java 程序中的所有字符串文字。
- 首先,JVM 找到字符串变量
d1
,它具有字面量Delftstack1
; JVM 将在 Java 堆内存中创建它。 - JVM 在字符串常量池内存中放置对文字
Delfstack1
的引用。 - JVM 然后寻找其他变量;如上图所示,它会找到带有文字
Delfstack2
的d2
和带有与d1
相同文字的d3
,即Delftstack1
。 - 现在,字符串
d1
和d3
具有相同的文字,因此 JVM 会将它们引用到字符串池中的同一对象,从而为另一个文字节省内存。
现在让我们运行 Java 程序,演示图中描述的示例和过程。参见示例:
package Delfstack;
public class String_Pool{
public static void main(String[] args){
String d1 = "Delftstack1";
String d2 = "Delftstack2";
String d3 = "Delftstack1";
if(d1==d2) {
System.out.println("Both Strings Refers to the same object in the String Pool");
}
else {
System.out.println("Both Strings Refers to the different objects in the String Pool");
}
if(d1==d3) {
System.out.println("Both Strings Refers to the same object in the String Pool");
}
else {
System.out.println("Both Strings Refers to the different objects in the String Pool");
}
}
}
此代码将与图片中的示例完全相同,并为三个变量创建两个对象。见输出:
Both Strings Refers to the different objects in the String Pool
Both Strings Refers to the same object in the String Pool
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。