gpt4 book ai didi

java - 'originalValue.length > size' 怎么会出现在 String 构造函数中?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:22:18 26 4
gpt4 key购买 nike

下面是String类的构造函数

public String(String original) {
int size = original.count;
char[] originalValue = original.value;
char[] v;
if (originalValue.length > size) {
// The array representing the String is bigger than the new
// String itself. Perhaps this constructor is being called
// in order to trim the baggage, so make a copy of the array.
int off = original.offset;
v = Arrays.copyOfRange(originalValue, off, off+size);
} else {
// The array representing the String is the same
// size as the String, so no point in making a copy.
v = originalValue;
}
this.offset = 0;
this.count = size;
this.value = v;
}

但是,我想知道怎么会

if (originalValue.length > size)

发生了什么?评论说'trim the baggage'baggage指的是什么?

最佳答案

看看子字符串,您就会明白这是如何发生的。

例如 String s1 = "Abcd";字符串 s2 = s1.substring(3)。这里s1.size()是1,但是s1.value.length是4。这是因为s1.value和s2.value是一样的。这是出于性能原因(子字符串在 O(1) 中运行,因为它不需要复制原始字符串的内容)。

使用子字符串会导致内存泄漏。假设您有一个很长的字符串,而您只想保留其中的一小部分。如果只是使用substring,实际上会在内存中保留原来的字符串内容。执行 String snippet = new String(reallyLongString.substring(x,y)),可以防止您浪费内存支持不再需要的大型 char 数组。

另见 What is the purpose of the expression "new String(...)" in Java?以获得更多解释。

关于java - 'originalValue.length > size' 怎么会出现在 String 构造函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12907986/

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