gpt4 book ai didi

java - 字符串文字是否存储在堆栈中?新的字符串是否存储在堆栈中?

转载 作者:IT老高 更新时间:2023-10-28 21:06:22 29 4
gpt4 key购买 nike

Possible Duplicate:
difference between string object and string literal

假设我有两个陈述。

String one = "abc";
String two = new String("abc");

哪个是栈内存,哪个是堆内存?

这两者有什么区别?

创建了多少对象,内存中的引用如何?

最佳做法是什么?

最佳答案

所有对象都存储在堆上(包括其字段的值)。1

局部变量(包括参数)始终包含原始值或引用,并存储在堆栈中。1

所以,对于你的两条线:

String one = "abc";
String two = new String("abc");

堆上有两个对象(两个包含 "abc" 的字符串对象)和堆栈上的两个引用,每个对象一个引用(提供 onetwo 是局部变量)。

(实际上,确切地说,当涉及到诸如字符串文字之类的中间字符串时,它们存储在所谓的字符串池中。)

How many objects are created and how is the reference in memory?

你问的很有趣,因为字符串在 Java 语言中是特殊的。

保证有一件事:每当你使用 new 时,你确实会得到一个 new 引用。这意味着 twonot 引用与 one 相同的对象,这意味着在这两行之后您将在堆上拥有两个对象代码。


1) 从形式上讲,Java 语言规范没有指定值在内存中的存储方式和位置。然而,这(或它的变体)通常是在实践中完成的。

关于java - 字符串文字是否存储在堆栈中?新的字符串是否存储在堆栈中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9991701/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com