Java中变量的命名限制
2022-09-05 00:09:55
为什么 Java 变量名称中不允许使用特殊字符(、 除外)?$
_
事实并非如此 - 许多特殊字符实际上对标识符有效。它在 JLS #3.8 中定义:
标识符是无限长度的 Java 字母和 Java 数字序列,其中第一个必须是 Java 字母。
[...]
“Java 字母”是该方法返回 true 的字符。
“Java 字母或数字”是该方法返回 true 的字符。Character.isJavaIdentifierStart(int)
Character.isJavaIdentifierPart(int)
例如,这是一个有效的变量名:
String sçèêûá¢é£¥ = "bc";
您可以使用以下简单代码查看所有有效字符:
public static void main(String args[]) {
for (int i = 0; i < Character.MAX_VALUE; i++) {
if (Character.isJavaIdentifierPart(i)) {
System.out.println("i = " + i + ": " + (char) i);
}
}
}
ps:@PeterLawrey博客上的好例子
实际上,在Java标识符中允许使用大量特殊字符。例如,您可以拥有每个货币符号和所有 10 个延续字符(而不仅仅是 _)
if( ⁀ ‿ ⁀ == ⁀ ⁔ ⁀ || ¢ + ¢== ₡)
更奇怪的是,您可以拥有不可见的字符或导致文本向后打印。
以下程序在其标识符中导致其“特殊”外观。\u202e
for (char ch = 0; ch < Character.MAX_VALUE; ch++)
if (Character.isJavaIdentifierPart(ch) && !Character.isJavaIdentifierStart(ch))
System.out.printf("%04x <%s>%n", (int) ch, "" + ch);
这将打印编译和运行的标识符中允许的所有特殊字符。
http://vanillajava.blogspot.co.uk/2012/09/hidden-code.html
http://vanillajava.blogspot.co.uk/2012/08/uses-for-special-characters-in-java-code.html