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