为什么Java八进制转义数最多只能达到255?

问题描述

纯粹出于历史原因,Java完全支持八进制转义序列。这些转义序列起源于C(或者可能是C的前身B和BCPL),在PDP-7这样的计算机统治地球的时代,许多编程都是通过汇编或直接用机器代码完成的,八进制是首选的数字用于编写指令代码的基础,并且没有Unicode,只有ASCII,因此三个八进制数字足以表示整个字符集。

到Unicode和Java出现时,八进制几乎已经让位给十六进制作为首选数字基,而十进制则无法做到。因此,Java的\u转义序列采用十六进制数字。支持八进制转义序列只是为了使C程序员感到舒适,并使将n粘贴的字符串常量从C程序复制到Java程序变得容易。

查看这些链接以了解历史琐事:

http://en.wikipedia.org/wiki/Octal#In_computershttp://en.wikipedia.org/wiki/PDP-11_architecture#Memory_management

解决方法

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个字符的八进制代码?