I recently learned指出统一码在Java源代码中是允许的,而不仅仅是作为统一码字符(例如,double π = Math.PI;
),但也作为转义序列(例如,double \u03C0 = Math.PI;
)。
第一个变体对我来说很有意义-它允许程序员用他们选择的国际语言命名变量和方法。然而,我没有看到第二种方法的任何实际应用。
下面是用Java 6和NetBeans 6.9.1测试的几段代码来说明用法:
此代码将打印3.141592653589793
public static void main(String[] args) {
double π = Math.PI;
System.out.println(\u03C0);
}
说明:π和\u03C0是相同的Unicode字符
此代码不会打印任何内容
public static void main(String[] args) {
double π = Math.PI; /\u002A
System.out.println(π);
/* a comment */
}
说明:上面的代码实际编码:
public static void main(String[] args) {
double π = Math.PI; /*
System.out.println(π);
/* a comment */
}
它注释掉了印刷文稿。
仅从我的示例中,我就注意到了该语言特性的一些潜在问题。
首先,糟糕的程序员可能会使用它来秘密注释掉一些代码,或者创建多种方法来识别同一个变量。也许还有其他可怕的事情是我没有想过的。
其次,IDE之间似乎缺乏支持。NetBeans和Eclipse都没有为示例提供正确的代码突出显示。事实上,NetBeans甚至标记了一个语法错误(尽管编译不是问题)。
最后,这个特性的文档很少,也没有被普遍接受。为什么程序员要在他的代码中使用其他程序员无法识别和理解的东西呢?事实上,我甚至在Hidden Java Features question上找不到任何关于这方面的东西。
我的问题是:
为什么Java允许在语法中使用转义的Unicode序列?这个特性的一些“优点”是什么让它保持了Java的一部分,尽管它有很多“缺点”?
发布于 2010-12-15 16:54:52
\u03C0
编码的好处在于,它不太可能被具有错误编码设置的文本编辑器忽略。例如,我的软件中的一个bug是由错误配置的文本编辑器意外地从UTF-8 é
转换为MacRoman é
引起的。通过指定Unicode代码点,您的意思是完全明确的。
发布于 2010-12-15 16:58:17
首先,谢谢你的问题。我觉得这很有趣。其次,原因是java源文件是一个可以使用各种字符集的文本。例如,Eclipse中的默认字符集是Cp1255。此添加不支持像π这样的字符。我认为他们认为程序员必须在不支持unicode的系统上工作,并希望允许这些程序员创建支持unicode的软件。这就是支持\u符号的原因。
https://stackoverflow.com/questions/4448180
复制相似问题