gpt4 book ai didi

java - String 和 StringBuilder 的区别及其内部组织

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:47:49 27 4
gpt4 key购买 nike

这是一个非常基本的问题。我所知道的答案的范围是字符串是不可变的。 Stringbuilders 不是,因此您可以在末尾附加字符。

那么 stringbuilders 内部是如何组织的?字符串是一个字符数组。

StringBuilder 也是字符数组吗?所以,我有一个 StringBuilder MY_OBJ= "Hello"。现在,如果我尝试将字符附加到 MY_OBJ 的末尾,这是否意味着您实际上正在创建一个新的数组对象并将所有这些字符复制到一个新的对象中?如果是这样,它如何比字符串更有效?

我想到的另一个问题是,如何标记 StringBuilder 的结束?像在 C 中一样,我们使用“/0”

最佳答案

我不知道。我们去看看:

72   public final class StringBuilder
73 extends AbstractStringBuilder
45        * The value is used for character storage.
46 */
47 char[] value;
48
49 /**
50 * The count is the number of characters used.
51 */
52 int count;

===

Is StringBuilder an array of characters too?

显然,在这个特定的实现中。

So, I have a StringBuilder MY_OBJ= "Hello". Now if i try to append characters to the end of MY_OBJ, does it not mean that you are actually creating a new array object and copying all these chars into a new one?

不一定。该数组不一定已满 ( count < value.length ),因此可能不需要分配新数组。理想情况下,您为 StringBuilder 初始化了一个容量,以便从一开始就分配足够大的数组。

StringBuilder sb = new StringBuilder(20);
sb.append("Hello");
...
sb.append(" there");

And another question I have in mind is, how does one mark the end of a StringBuilder? Like in C, we use a "/0"

你不在乎 - String/StringBuilder将在内部处理。

关于java - String 和 StringBuilder 的区别及其内部组织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7265938/

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