gpt4 book ai didi

java - Java 中的字符串

转载 作者:行者123 更新时间:2023-11-30 07:06:47 25 4
gpt4 key购买 nike

我很想知道在以下情况下 String 对象行为的确切原因。

我很想了解以下代码片段及其工作原理。

片段

String s1 = "I belong to String pool";
String s2 = new String("I'm present on Heap space");

问题:

  • 那些字符串文本,也就是内存中存储的字符数组在哪里? “我属于字符串池”字符数组是否存在于字符串池中,“我属于堆空间”字符数组是否实际存在于堆空间中?

简而言之,谁能解释一下String literal reference、String literal text、String object reference s2、String object text等的存放位置

像以下帖子这样的图表表示将非常有用。 http://theopentutorials.com/tutorials/Java/strings/string-literal-pool/

最佳答案

(您可以检查 this answer ,但我会尽量缩短它。)

首先要意识到 String 是由 char[] 数组 支持的对象,因此 String 本身可以在不同的位置在内存中比包含实际字母的 char 数组。

来源:

public final class String implements ... {

/** The value is used for character storage. */
private final char value[]; // <- String is backed by this array

...
}

所以你的问题:

Where are those string text i.e character arrays stored in memory ?

String 对象和后备数组都存储在堆中,即使是编译时字符串也是如此。字符串池仅包含对字符串的引用。

Does "I belong to String pool" character array is present inside String pool and "I'm present on Heap space" character array actually present on the Heap Space ?

不,一切都分配在堆上。字符串池仅包含引用。

In short, can anyone please explain the storage locations of String literal reference, String literal text, String object reference s2, String object text etc.

让我们从 String 对象开始。将有 3 个字符串对象,原始的 "I belong to String pool""I'm present on Heap space" 和新创建的 "I'm存在于堆空间中”

但是只有 2 个支持数组,因为前一点的第二个和第三个字符串将由相同的字符数组支持。 (您可以查看 String(String) 构造函数)。

在字符串池中,将有两个引用:对原始“我属于字符串池”“我存在于堆空间”

在你的堆栈上,你还有 2 个字符串引用,s1 将与字符串池中的相同(= 它将指向相同的地址),但是 s2 会有所不同(因为您需要一个 new 字符串)。

关于java - Java 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25449739/

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