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



请解释一下执行以下代码部分时究竟会发生什么:

int a='15';
System.out.println(a);

这打印出 13;

int a='25';
System.out.println(a);

这打印出 21;

int a='100';
System.out.println(a);

这打印出 64。

您已经将一个字符文本分配给int变量,该字符文本由单引号分隔,例如'a'(与由双引号分隔的字符串文本不同,例如"a")。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.4: 字符文字
  • 3.10.6: 字符和字符串文本的转义序列

引用 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

表示法 nnn 表示 Java 中的八进制字符代码。 因此,int a = '15'将自动转换的八进制字符 15 的值分配给十进制 13 a

你把数字放在引号里的事实让我怀疑它是在将数字解释为字符文字。后面的数字必须是八进制。

相关内容

最新更新