java中变量的命名限制

NPK*_*PKR 10 java

为什么特殊字符(除$,_不允许在Java中的变量名)?

ass*_*ias 18

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

标识符是无限长度的Java字母和Java数字序列,第一个必须是Java字母.
[...]
"Java letter"是该方法Character.isJavaIdentifierStart(int)返回true 的字符.
"Java letter-or-digit"是该方法Character.isJavaIdentifierPart(int)返回true 的字符.

例如,这是一个有效的变量名称:

String sçèêûá¢é£¥ = "bc";
Run Code Online (Sandbox Code Playgroud)

您可以使用以下简单代码查看所有有效字符:

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

ps:@ PeterLawrey博客上的好例子

  • 如果变量名称以"特殊"字符开头,例如:Stringçèêûá¢é£¥="bc",我认为你的例子会更清楚; (2认同)

Pet*_*rey 15

实际上,Java标识符中允许存在大量特殊字符.例如,您可以拥有每个货币符号和所有10个连续符号(不仅仅是_)

if( ? ? ? == ? ? ? || ¢ + ?== ?)
Run Code Online (Sandbox Code Playgroud)

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

以下程序\u202e在其标识符中具有"特殊"外观.

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);
Run Code Online (Sandbox Code Playgroud)

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

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


dav*_*rld 7

以下代码在Java中都有效...

int ? = 1;
double ? = 3.141592;
String ?? = "hello";
?++;
System.out.println(?);
Run Code Online (Sandbox Code Playgroud)

我会说这些是变量名称的特殊字符.

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