今天我已经读过字符串在java中以null字符终止。但是为什么它是必要的,因为字符串的长度已经由sting类的长度变量维护了?所以对我来说这有点奇怪。请有人向我澄清。
谢谢
答案 0 :(得分:12)
Java字符串不是以null结尾。它们的长度为length
。您可以将\0
设置为Java字符串的最后一个字符,但这不会自动终止该字符串。 12<\0>45
的长度仍然是5,而不是C中的2。
答案 1 :(得分:7)
不要相信你读过的一切。在下面的屏幕截图中,您可以看到没有空终止。
答案 2 :(得分:3)
文档中没有提及任何类型。我认为你读错了。
如果某些Java实现为null终止字符串,那么它是一个实现细节,但语言规范不保证任何内容。 (当然,正如assylias所说,字符串可能包含Java中的U + 0000。)但这并非闻所未闻。 VB的字符串指向开头并且以null结尾,使它们与普通的C API兼容,并且它们的长度存储在字符串的开头之前。
答案 3 :(得分:-4)
这种同时具有长度字段并保持字符串空终止的策略通常是有效的,因为许多库和api都期望以空字符串终止字符串。
这意味着您仍然可以获得保持长度分离的性能提升以及直接将字符串传递给api的能力,而不必创建字符串的副本。简而言之:两个世界中最好的只需要一个字节的费用。