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

时间:2015-07-31 06:15:41

标签: java eclipse

//System.out.println("hii");'\uxxx'

对println语句进行了注释,但未对unicode进行评论。为什么?

4 个答案:

答案 0 :(得分:4)

Java允许您在源代码中使用Unicode。与许多其他语言不同,它允许您在任何地方这样做,当然包括评论。它也允许在标识符中使用,因此您可以编写合法的Java代码:

    String हिन्दी = "Hindi";

变量名完全合法(尽管编码惯例不鼓励这样使用)。

javac而言,源代码是Unicode。问题是它可以用不同的编码表示,有些编辑器不支持Unicode,并且有些地方使用非ASCII文件会产生问题。

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

String s = "123";

可以写成:

String s \u003d "123"\u003b

它将被正确编译,没有任何问题。实际上,您可以在Unicode转义中编写整个程序,包括换行符。 Java编译器根本不关心Unicode转义是在文字内还是在源本身内。

但结果是编译器需要首先解释Unicode转义 ,然后才将源分解为标识符,运算符和注释等标记,然后检查语法等。

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

答案 1 :(得分:2)

Unicode可以用\uCODE表示,而不是/uCODE。如果您的unicode是新行,并且您尝试在unicode之后编写内容,则可能会显示编译时错误。否则内联unicodes会在单行注释中注释。不需要专门注释unicode。

//Compilation Error
//System.out.println("hii"); \u000d Hello

修改

当编译器启动时,它将所有unicode字符替换为其值,包括 评论的人物。

因此,在编译过程中的上述语句中,它变为。

//System.out.println("hii");
Hello

答案 2 :(得分:2)

创建Java语言规范时,接受Unicode标准,并将char原语定义为16位数据类型,十六进制范围内的字符从 0x0000到0xFFFF。

此外,您应该使用" \ 0001" 而不是" / 0001"。

答案 3 :(得分:1)

javac在执行任何其他操作之前转换\u转义符,包括处理注释。所以当它看到:

\uxxx

它将此标识为无效 Unicode转义并停止编译并显示错误。