我想将 aphostrophe 的值分配给一个字符:
char a = '\'';
但是,我想使用 unicode 版本的撇号 (\u0027) 使其与我的代码保持一致:
char a = '\u0027';
但是这样做会产生一个错误,说“未封闭的字符文字”。
如何在代码中仍然包含 unicode 代码的情况下执行此任务?
\u0027
不起作用的原因是编译器很早就处理了 unicode 转义,当然,它最终是'
- 终止文字。编译器实际上看到了这一点:
char a = ''';
...这自然是一个问题。JLS 在第 3.10.4 节(字符文字)中讨论了与换行有关的内容。
坦率地说,我认为你最好写
char a = '\'';
...但是char
是数字类型,所以你可以这样做:
char a = 0x0027;
当然,你可以这样做:
char a = "\u0027".charAt(0);
...但我认为我们都同意这有点矫枉过正。;-)
哦,或者查看Greg 的答案:(当然是反斜杠 - 所以编译器会看到char a = '\u005c\u0027';
)。\u005c
'\''
你也可以这样做
char a = '\u005c\u0027';
其中\u005c是 \ 的 Unicode
在 javac 做任何其他事情之前,它首先将所有 \u#### 转换为 char。所以你的代码相当于
char a = ''';
这就是它不编译的原因。
\u#### 不仅适用于字符/字符串文字,您可以在任何地方使用它,例如在变量名中。
然而,人们很少在标识符中使用非拉丁字符;如果有人这样做,他可能会使用他的本机字符集,而且他也不需要 \u####。
因此,除了字符/字符串文字之外,我们从未真正在任何地方看到 \u####,这会给不知情的人留下错误的印象。
如果有时间机器,我们可能应该取消此功能,因为它令人困惑且未被使用。
这是另一种选择,虽然确实有点矫枉过正:
char c = "\u0027".charAt(0);