为什么字符串在java中以null字符终止?

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

谢谢

Java字符串不是以null结尾。 它们以长度结束。 您可以将\0作为Java字符串的最后一个字符,但不会自动终止该字符串。 12<\0>45的长度仍然是5而不是C中的2。

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

文档中没有提及任何类型。 我假设你读错了。

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

这种同时具有长度字段并保持字符串空终止的策略通常是有效的,因为许多库和api期望空终止字符串。

这意味着你仍然可以获得保持长度分离的性能提升以及直接将字符串传递给api的能力,而不必创建字符串的副本。 简而言之:两个世界中最好的,只需要一个字节的费用。