【问题标题】:Clarification on Java Language SpecificationJava语言规范说明
【发布时间】:2013-12-08 21:27:10
【问题描述】:

我在 Java 语言规范中阅读了以下短语。

SingleCharacter 或后面的字符是编译时错误 EscapeSequence 不是 '.'

我无法理解上述行的含义。有人可以举个例子来解释一下。

【问题讨论】:

标签: java compile-time jls


【解决方案1】:

基本上说的是:每个不同于' 的字符都会生成一个编译时错误,它出现在“字符”本身之后。其中“字符”是字符形式的内容(如:a0\u0093)或转义序列(如:\\\b\n)。

所以,这将是错误的:

  • 'aa',因为第二个 a 不是单引号 (')。
  • '\\a',因为第二个字符(a)不是单引号。
  • 'a,因为“内容”之后的字符不是引号(但可能是换行符或空格)。

旁注:这也不起作用:char c = '\u0027';。因为这是单引号的代码点,所以它被翻译成:char c = ''';

【讨论】:

  • 迄今为止最好的解释。
【解决方案2】:

我想这是关于字符文字的。另一种说法是:字符文字必须用撇号括起来,如果忘记第二个撇号,则会出错。

因此:

'a'          // correct
'\007'       // correct
'ab          // wrong

【讨论】:

  • '\' 也是错误的。不过,他从未说过这是一份完整的清单。
【解决方案3】:

在 Java 中,您可以将字符变量定义为转义序列或单个字符。这些应该用单引号括起来。

char ch = 'a'; 
// Unicode for uppercase Greek omega character
char uniChar = '\u039A';

更多信息和示例可以在Characters上的Java教程中找到。

【讨论】: