Java 语言规范指出,字符串中的转义符是“正常”的 C 语言,如 \n
和 \t
,但它们也指定了从 \0
到 \377
的八进制转义符。具体而言,JLS 指出:
OctalEscape:
\ OctalDigit
\ OctalDigit OctalDigit
\ ZeroToThree OctalDigit OctalDigit
OctalDigit: one of
0 1 2 3 4 5 6 7
ZeroToThree: one of
0 1 2 3
这意味着像
\4715
这样的东西是非法的,尽管它在 Java 字符的范围内(因为 Java 字符不是字节)。为什么 Java 有这种任意限制?您打算如何为超过 255 的字符指定八进制代码?
最佳答案
Java 完全支持八进制转义序列可能纯粹是出于历史原因。这些转义序列起源于 C(或者可能是 C 的前身 B 和 BCPL),在像 PDP-7 这样的计算机统治地球的时代,很多编程是用汇编或直接用机器代码完成的,八进制是首选数字用于编写指令代码的基础,并且没有 Unicode,只有 ASCII,因此三个八进制数字足以表示整个字符集。
到 Unicode 和 Java 出现时,八进制几乎已经让位于十六进制作为首选的数基,而十进制则行不通。因此,Java的\u
转义序列采用十六进制数字。支持八进制转义序列可能只是为了让 C 程序员感到舒适,并使将 C 程序中的字符串常量“n”粘贴到 Java 程序中变得容易。
查看这些历史琐事的链接:
http://en.wikipedia.org/wiki/Octal#In_computers
http://en.wikipedia.org/wiki/PDP-11_architecture#Memory_management
关于java - 为什么 Java 八进制转义只能达到 255?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9543026/