JLS 3.1 Unicode 中的 "text" 指的是什么?

What does "text" in JLS 3.1 Unicode refer to?

JLS 的 3.1 Unicode 部分指出:

The Java programming language represents text in sequences of 16-bit code units, using the UTF-16 encoding.

“文字”指的是什么?

不知道是不是指

该特定句子指的是 Java 程序如何表示文本数据;即 String 和相关类型。

但是,需要注意不要过度解读这一点。

  1. 它的真正含义是文本数据被建模为UTF-16代码点序列。这实际上是关于 JLS 如何处理 Java 语言 与文本处理相关的那些方面;即字符串文字是如何建模的。 JLS 本身没有指定 String API。即由 javadocs 指定:一个单独的文件。实际上,JLS 仅指定(或暗示)字符串具有某些属性。

  2. JavaString 对象表示 为 UTF-16 不再是字面上正确的。自 Java 9 起,String class 使用字符串值的混合表示。字符串现在 内部 使用 byte[] 而不是 char[] 表示。如果字符串仅由 LATIN-1 代码点组成,则每个代码单元用一个 byte 编码。如果字符串包含 LATIN-1 范围之外的任何代码单元,则它以 UTF-16 编码。

    简而言之,String 被 javadocs 建模 作为 both UTF-16 代码单元序列 一系列 Unicode 代码点。内部表示比较复杂

  3. Java 应用程序实际上可以选择以任何方式建模和表示文本;即任何对应用程序有意义的方式。它不必使用 String 或相关的 classes。 (显然,如果应用程序选择不使用 String 等等,有些事情会更复杂。例如,Java 的字符串文字语法只产生 String 个对象,还有许多其他APIs 需要 String 个值。)

如果你把这些注意事项放在一起,我们正在谈论的特定句子最好被视为解释性的而不是规定性的。


Java 编译器在内部表示(Java 源代码)文本的方式与大多数其他 Java 程序相同;即使用 String 和相关类型。 不过这是一个实现细节。只要编译器正确支持 Java 源代码中的 Unicode,它在编译时如何表示并不重要。

(“正确支持”表示符合 JLS 指定的内容。)