为什么一些字符文字会导致Java中的语法错误?

在最新版本的Java专业人员通讯中,作者提到了一段在Java中不可编译的代码

public class A1 {
  Character aChar = 'u000d';
}

尝试编译它,你会得到一个错误,如:

A1.java:2: illegal line end in character literal
              Character aChar = 'u000d';
                                ^

为什么一个等效的c#代码块不显示这样的问题?

public class CharacterFixture
{
  char aChar = 'u000d';
}

我错过了什么?

编辑:我的问题的初衷是如何C#编译器得到unicode文件解析正确(如果是这样),为什么Java仍应坚持不正确(如果是这样)解析? 编辑:另外,我希望myoriginal问题标题被恢复? 为什么如此繁重的编辑,我强烈怀疑它大大改变了我的意图。


Java的编译器将uxxxx转义序列转换为最初的步骤之一,甚至在令牌uxxxx获得代码破解之前。 当它实际开始标记时,不再有uxxxx序列; 他们已经变成了他们所代表的字符,所以对于编译器来说,Java示例看起来是一样的,就好像你实际上在那里输入了回车。 它这样做是为了提供一种在源文件中使用Unicode的方式,而不管源文件的编码如何。 即使ASCII文本仍然可以在必要的情况下完全代表Unicode字符(以可读性为代价),并且由于它的完成时间很早,您可以将它们放在代码中的任何位置。 (你可以说是u0063u006cu0061u0073u0073u0020u0053u0074u0075u0066u0066u0020u007bu007d ,并且编译器会将它读作class Stuff {} ,如果你想成为烦人或折磨自己。)

C#不这样做。 uxxxx稍后会与程序的其余部分一起翻译,并且仅在特定类型的标记(即标识符和字符串/字符文字)中有效。 这意味着它不能用于可以在Java中使用的某些地方。 clu0061ss不是关键字。

链接地址: http://www.djcxy.com/p/20575.html

上一篇: Why do some character literals cause Syntax Errors in Java?

下一篇: Why does this code showing error invalid unicode?