pax*_*blo 6 java escaping octal
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
Run Code Online (Sandbox Code Playgroud)
意味着类似的东西\4715是非法的,尽管它在Java字符的范围内(因为Java字符不是字节).
为什么Java有这种任意限制?你是如何指定超过255的字符的八进制代码?
可能纯粹由于历史原因,Java支持八进制转义序列.这些逃逸序列起源于C(或者可能是C的前身B和BCPL),在像PDP-7这样的计算机统治地球的时代,大量编程是在装配中或直接在机器代码中完成的,并且八进制是首选的数字用于编写指令代码的基础,并且没有Unicode,只有ASCII,因此三个八进制数字足以表示整个字符集.
当Unicode和Java出现时,八进制几乎已经让位于十六进制作为首选数字基数,而十进制不会这样做.所以Java的\u转义序列采用十六进制数字.可能只支持八进制转义序列以使C程序员感到舒服,并且可以很容易地将C程序中的字符串常量复制到Java程序中.
查看这些链接了解历史琐事:
http://en.wikipedia.org/wiki/Octal#In_computers
http://en.wikipedia.org/wiki/PDP-11_architecture#Memory_management