5

我一直在研究实现,但我不明白为什么会有偏移。我认为这很重要。

我正在学习 Sedgewick 教授的算法课程,现在我们正在讨论字符串。在讲座中,他简要讨论了 String 的实现,但他没有解释为什么会有偏移量(注意,如果讲座不在线,我肯定会问)。

似乎当人们在实现中创建一个 String 时,它被赋予了一个偏移量,我似乎无法理解为什么需要一个。即使出于子字符串的目的,我也不完全理解为什么会有偏移量。例如,显然,如果您创建一个 string "David",它真的是['X', 'X', 'D', 'a', 'v', 'i', 'd', 'X'],或类似性质的东西,它被'X's 偏移。为什么是这样?

4

2 回答 2

5

这在字符串需要从另一个更长的字符串派生的情况下很有用,类似于 substring()。

在这种情况下,可以使用相同的(不可变的)后备数组,同时调整偏移量和长度,以节省内存并优化性能。

在 JDK7 中不再是这种情况。

于 2013-11-11T03:43:21.153 回答
1

偏移量通常作为优化存在。例如,在字符数组相关项中,可以多次使用同一个字符数组,从数组中构造多个String。这是因为您将使用具有不同偏移量和长度的相同数组。

这是一个非常有效的优化,因为它避免了仅仅为了让您希望从零索引开始的字符而构建新字符数组的需要。例如,在读入一个字节块(可能从一个套接字)之后,您可以将其分块为字符串大小的消息,而无需进行不必要的字节复制。

于 2013-11-11T03:44:27.597 回答