为什么此代码显示错误无效的unicode?

cha*_*tra 3 java eclipse

//System.out.println("hii");'\uxxx'
Run Code Online (Sandbox Code Playgroud)

println语句已注释,但unicode未注释。为什么?

Rea*_*tic 6

Java允许您在源代码中使用Unicode。与许多其他语言不同,它允许您在任何地方进行操作,包括注释。并且它还允许在标识符中使用它,因此您可以编写如下所示的合法Java代码:

    String ?????? = "Hindi";
Run Code Online (Sandbox Code Playgroud)

变量名是完全合法的(尽管编码约定不鼓励此类用法)。

因此,就javac源而言,源代码是Unicode。问题在于它可以用不同的编码表示,并且某些编辑器不支持Unicode,并且在某些地方使用非ASCII文件会造成问题。

因此,允许在代码中使用Unicode转义。尽管具有Unicode标识符或注释,但这将使文件完全为ASCII。您可以用等效的Unicode转义符替换代码中的任何字符。甚至“普通”字符也是如此;。例如,以下行:

String s = "123";
Run Code Online (Sandbox Code Playgroud)

可以写成:

String s \u003d "123"\u003b
Run Code Online (Sandbox Code Playgroud)

而且它将被正确编译并且没有任何问题。实际上,您可以使用Unicode转义符(包括换行符)编写整个程序。Java编译器根本不在乎Unicode转义是在文字内部还是在源代码本身中。

但这样做的结果是,编译器需要解释Unicode转义第一,然后才打破源进入令牌,如标识,运营商和意见,之后,它会检查语法等。

这意味着,如果您的源代码中有非法的Unicode转义序列,即使它位于注释中,它也将被标记为错误,因为此时编译器甚至都不知道所查找的代码的特定部分。在是评论。


Cod*_*roc 2

Unicode 可以用\uCODE和 不 来表示/uCODE。如果你的 unicode 是新行,并且你尝试在 unicode 之后写一些东西,它可能会显示编译时错误。否则内联 unicode 会在单行注释中进行注释。无需专门注释 unicode。

//Compilation Error
//System.out.println("hii"); \u000d Hello
Run Code Online (Sandbox Code Playgroud)

编辑

当编译器启动时,它会用它的值替换所有 unicode 字符,包括注释字符。

所以在上面的编译过程中的语句就变成了。

//System.out.println("hii");
Hello
Run Code Online (Sandbox Code Playgroud)