首页 >Java >java教程 >Java 字符串池:堆或栈——字符串对象驻留在哪里?

Java 字符串池:堆或栈——字符串对象驻留在哪里?

DDD
DDD原创
2024-12-17 21:14:12905浏览

Java String Pool: Heap or Stack—Where Does a String Object Reside?

Java 字符串池:堆栈分配与堆存储

考虑代码片段:

String first = "abc"; 
String second = new String("abc");

实例化一个使用 new 关键字的 new String 对象在堆上创建一个不同的 String 对象。与其他基元不同,String 对象是不可变的,这意味着它们在初始化后无法修改。

但是,Java 在堆中维护了一个 String 池,该池存储有限数量的常用 String。当定义文字字符串(用双引号括起来)时,编译器会检查字符串池中是否存在现有的匹配字符串。如果找到,文字 String 将引用池中现有的 String,保证内存效率。

在本例中,由于“abc”是文字 String,因此它将被放入字符串池中。

现在,让我们考虑使用 new String("abc") 创建的新 String 对象:

  • 一个新的 String 对象是在堆上创建的,而不是在堆上创建的。
  • 尽管是文字“abc”的副本,但该对象不会存储在字符串池中。

因此,我们的代码结果为 字符串池中的一个字符串(“abc”)和堆上的一个不同的字符串(用new创建的字符串)字符串(“abc”))。

以上是Java 字符串池:堆或栈——字符串对象驻留在哪里?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn