为什么Java允许在源代码中使用转义的unicode字符?
我最近了解到,Unicode在Java源代码中是允许的,而不仅仅是Unicode字符(例如。 )但也作为转义序列(例如。 ).double π = Math.PI;
double \u03C0 = Math.PI;
第一个变体对我来说是有意义的 - 它允许程序员用他们选择的国际语言命名变量和方法。但是,我没有看到第二种方法的任何实际应用。
以下是几段代码来说明用法,这些代码已使用 Java SE 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 甚至标记了语法错误(尽管编译不是问题)。
最后,此功能的文档记录很差,不被普遍接受。为什么程序员会在他的代码中使用其他程序员无法识别和理解的东西?事实上,我甚至在隐藏的Java功能问题中找不到有关此内容的信息。
我的问题是这样的:
为什么Java允许在语法中使用转义Unicode序列?这个特性有哪些“优点”,尽管它有很多“缺点”,但它们仍然成为Java的一部分?