Java \uxxx、\uuxxx和\uuuxxx之间的差异

Java \uxxx、\uuxxx和\uuuxxx之间的差异,java,jls,Java,Jls,下一行来自: 如果符合条件的\后跟u或多个u,且最后一个u未后跟 按四个十六进制数字,则发生编译时错误 因此,这意味着以下几行将产生相同的结果: System.out.println('\u0065'); // prints "e" System.out.println('\uu0065'); // prints "e" System.out.println('\uuu0065'); // prints "e" 在\uxxx中使

下一行来自:

如果符合条件的\后跟u或多个u,且最后一个u未后跟 按四个十六进制数字,则发生编译时错误

因此,这意味着以下几行将产生相同的结果:

System.out.println('\u0065');   // prints "e"
System.out.println('\uu0065');  // prints "e"
System.out.println('\uuu0065'); // prints "e"

在\uxxx中使用单个u与在\uuxxx中使用uu基本相同。我的问题是,为什么我们需要这种设计?

后面引用的部分会说明原因:

Java编程语言指定了一种将Unicode编写的程序转换为ASCII的标准方法,该方法将程序转换为可由基于ASCII的工具处理的形式。转换涉及将程序源文本中的任何Unicode转义转换为ASCII,方法是添加额外的u(例如,\uxxx变为\uuxxxxx),同时将源文本中的非ASCII字符转换为包含单个u的Unicode转义


这意味着它使转换为ASCII完全可逆,因为您知道哪些转义序列最初出现在代码中,哪些是通过转换添加的。

后面引用的部分说明了原因:

Java编程语言指定了一种将Unicode编写的程序转换为ASCII的标准方法,该方法将程序转换为可由基于ASCII的工具处理的形式。转换涉及将程序源文本中的任何Unicode转义转换为ASCII,方法是添加额外的u(例如,\uxxx变为\uuxxxxx),同时将源文本中的非ASCII字符转换为包含单个u的Unicode转义

这意味着它使转换为ASCII完全可逆,因为您知道哪些转义序列最初在代码中,哪些是通过转换添加的。

提供了完整的信息,但不是外行术语

幕后发生的事情是源代码中的每个字符都转换为Unicode转义序列。所以当我们写这样的东西时:

它将转换为:

\u1234 // Escape sequence for `ሴ` is `\u1234`.
\uu1234\u1234
现在,当我们写:

\u1234ሴ
它将转换为:

\u1234 // Escape sequence for `ሴ` is `\u1234`.
\uu1234\u1234
这样做是为了向后兼容。通过使用这种过程,我们可以从转义序列中恢复原始ASCII字符

在源代码(如ex\u1234)中输入的转义序列将获得uu并替换为\uu1234,而没有转义序列的字符将获得单个u,因此ሴ 将导致\u1234

下一行来自同一节,即:

Unicode转义生成的字符不参与进一步的Unicode转义

这些段落现在更有意义了:

Java编程语言指定了转换 用Unicode编写成ASCII的程序,可将程序更改为可由基于ASCII的工具处理的形式。转换涉及将程序源文本中的任何Unicode转义转换为ASCII,方法是添加额外的u(例如,\uxxx变为\uuxxxxx),同时将源文本中的非ASCII字符转换为包含单个u的Unicode转义

这个转换后的版本同样可以被Java编译器接受,并且表示完全相同的程序。通过将存在多个u的每个转义序列转换为少一个u的Unicode字符序列,同时将具有单个u的每个转义序列转换为相应的单个Unicode字符,可以从该ASCII格式恢复确切的Unicode源

提供完整的信息,但不是外行术语

幕后发生的事情是源代码中的每个字符都转换为Unicode转义序列。所以当我们写这样的东西时:

它将转换为:

\u1234 // Escape sequence for `ሴ` is `\u1234`.
\uu1234\u1234
现在,当我们写:

\u1234ሴ
它将转换为:

\u1234 // Escape sequence for `ሴ` is `\u1234`.
\uu1234\u1234
这样做是为了向后兼容。通过使用这种过程,我们可以从转义序列中恢复原始ASCII字符

在源代码(如ex\u1234)中输入的转义序列将获得uu并替换为\uu1234,而没有转义序列的字符将获得单个u,因此ሴ 将导致\u1234

下一行来自同一节,即:

Unicode转义生成的字符不参与进一步的Unicode转义

这些段落现在更有意义了:

Java编程语言指定了转换 用Unicode编写成ASCII的程序,可将程序更改为可由基于ASCII的工具处理的形式。转换涉及将程序源文本中的任何Unicode转义转换为ASCII,方法是添加额外的u(例如,\uxxx变为\uuxxxxx),同时将源文本中的非ASCII字符转换为包含单个u的Unicode转义

这个转换后的版本同样有效 Java编译器可以接受,并且表示完全相同的程序。通过将存在多个u的每个转义序列转换为少一个u的Unicode字符序列,同时将具有单个u的每个转义序列转换为相应的单个Unicode字符,可以从该ASCII格式恢复确切的Unicode源