字符文字中转义数字的Java语义是什么,例如'\ 15'?

VAr*_*VAr 84 java syntax character literals octal

请解释在执行以下代码段时会发生什么:

int a='\15';
System.out.println(a);
Run Code Online (Sandbox Code Playgroud)

这打印出13;

int a='\25';
System.out.println(a);
Run Code Online (Sandbox Code Playgroud)

这打印出21;

int a='\100';
System.out.println(a);
Run Code Online (Sandbox Code Playgroud)

这打印出64.

Boh*_*ian 115

您已经分配了一个字符文字,它由单引号分隔,例如'a'(与字符串文字不同,由双引号分隔,例如"a")到一个int变量.Java执行自动扩展转换,从16位无符号char转换为32位有符号转换int.

但是,当字符文字是反斜杠后跟1-3位数时,它是字符的八进制(基数/基数 8)表示.从而:

  • \15= 1×8 + 5 = 13(回车;相同'\r')
  • \25 = 2×8 + 5 = 21(NAK字符 - 否定确认)
  • \100= 1×64 + 0×8 + 0 = 64(@符号;相同'@')

有关字符文字和转义序列的更多信息,请参阅JLS部分:

从3.10.6 引用BNF:

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)

  • @Jayamohan我的意思是数量1-3,而不是价值 (6认同)
  • 我在3.10.1节中找不到它.它在3.10.4,字符文字中 (3认同)

Bah*_*qar 19

符号\nnn表示Java中的八进制字符代码.所以int a = '\15'将八进制字符15的自动转换值指定a为十进制13.

  • 符号`\nnn`在Java中用_not_表示八进制数.在OP的代码中,它表示八进制字符转义序列.周围的引号是必不可少的.然后通过赋值将字符扩展为整数值.(八进制数用前导零数字表示.) (5认同)

Nik*_*hil 6

将数字放在引号中这一事实让我怀疑它是将数字解释为字符文字.后面的数字必须是八进制的.