0

今天我读到字符串在java中以空字符终止。但是为什么有必要,因为字符串的长度已经由 sting 类的长度变量维护?所以这对我来说有点奇怪。请有人向我澄清。

谢谢

4

4 回答 4

13

Java 字符串不是以空值结尾的。它们以 in 的长度结束length。您可以创建\0Java 字符串的最后一个字符,但这不会自动终止该字符串。的长度12<\0>45仍然是 5 而不是 C 中的 2。

于 2013-07-11T13:53:43.977 回答
7

不要相信你读到的一切。在下面的屏幕截图中,您可以看到没有空终止。在此处输入图像描述

于 2013-07-11T13:56:21.717 回答
3

该文档没有提到任何此类。我假设你读错了。

如果某些 Java 实现以空值终止字符串,那么它是一个实现细节,但语言规范不保证任何内容。(当然,正如 assylias 所指出的,Java 中的字符串可能包含 U+0000。)不过,这并非闻所未闻。VB 的字符串指向开头并以空结尾,使它们与普通的 C API 兼容,并且它们的长度存储在字符串开头之前。

于 2013-07-11T13:52:59.457 回答
-4

这种同时具有长度字段并保持字符串以空值结尾的策略经常被采用,因为许多库和 api 都需要以空值结尾的字符串。

这意味着您仍然可以获得保持长度分开的性能提升以及直接将字符串传递给 api 的能力,而无需创建字符串的副本。简而言之:两全其美,只需花费字节数。

于 2013-07-11T13:54:16.463 回答