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 对象:
因此,我们的代码结果为 字符串池中的一个字符串(“abc”)和堆上的一个不同的字符串(用new创建的字符串)字符串(“abc”))。
以上是Java 字符串池:堆或栈——字符串对象驻留在哪里?的详细内容。更多信息请关注PHP中文网其他相关文章!