java中变量的命名限制

为什么Java变量名中不允许使用特殊字符( $_除外)?

事实并非如此 – 许多特殊字符实际上对标识符有效。 它在JLS#3.8中定义:

标识符是Java字母和Java数字的无限长度序列,其中第一个必须是Java字母。
[…]
“Java字母”是Character.isJavaIdentifierStart(int)方法返回true的Character.isJavaIdentifierStart(int)
“Java letter-or-digit”是Character.isJavaIdentifierPart(int)方法返回true的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( ⁀ ‿ ⁀ == ⁀ ⁔ ⁀ || ¢ + ¢== ₡) 

更奇怪的是,您可以使用不可见的字符或使文本向后打印。

以下程序在其标识符中具有“特殊”外观。

 for (char c‮h = 0; c‮h < Character.MAX_VALUE; c‮h++) if (Character.isJavaIdentifierPart(c‮h) && !Character.isJavaIdentifierStart(c‮h)) System.out.printf("%04x <%s>%n", (int) c‮h, "" + c‮h); 

这将打印编译和运行的标识符中允许的所有特殊字符。

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

以下代码在Java中都有效…

 int Δ = 1; double π = 3.141592; String 你好 = "hello"; Δ++; System.out.println(Δ); 

我会说这些变量名称都是非常特殊的字符。

资料来源: http : //rosettacode.org/wiki/Unicode_variable_names#Java