Why does this code showing error invalid unicode?
1 | //System.out.println("hii");'\uxxx' |
println语句有注释,但unicode没有注释。为什么?
Java允许您在源代码中使用Unicode。与许多其他语言不同,它允许您在任何地方这样做,当然包括注释。它也允许它在标识符中,所以你可以像这样写合法的Java代码:
1 |
变量名是完全合法的(尽管编码约定不鼓励这样的使用)。
就
因此允许在代码中使用Unicode转义。这将使文件完全是ASCII格式,尽管有Unicode格式的标识符或注释。可以用等效的Unicode转义符替换代码中的任何字符。甚至是像
1 |
可以写为:
1 | String s \u003d"123"\u003b |
它将被正确地编译,没有任何问题。实际上,您可以用Unicode转义符(包括换行符)编写整个程序。Java编译器根本不关心Unicode是否在文本或源本身中。
但结果是,编译器需要先解释unicode转义,然后才将源代码分解成标识符、运算符和注释等标记,然后检查语法等。
这意味着,如果源代码中有非法的Unicode转义序列,即使它在注释中,它也会被标记为错误,因为此时编译器甚至不知道它正在查看的代码的特定部分是注释。
当Java语言的规范被创建时,Unicode标准被接受,CHAR原语被定义为16位数据类型,十六进制范围中的字符从0x00到0xFFFF。
此外,还应使用" 001"而不是"/0001"。
unicode可以用
1 2 | //Compilation Error //System.out.println("hii"); \u000d Hello |
编辑
当编译器启动时,它用它的值替换所有Unicode字符,包括注释的字符。
所以在上面的语句中,在编译期间它变成了。
1 2 | //System.out.println("hii"); Hello |
javac转换
它将此标识为无效的Unicode转义,并以错误停止编译。