java中变量的命名限制

java中变量的命名限制,java,Java,为什么Java变量名中不允许使用特殊字符(除了$,)呢?事实并非如此-许多特殊字符实际上对标识符有效。定义如下: 标识符是Java字母和Java数字的无限长序列,其中第一个必须是Java字母。 […] “Java字母”是方法character.isJavaIdentifierStart(int)返回true的字符。 “Java字母或数字”是方法character.isJavaIdentifierPart(int)返回true的字符 例如,这是一个有效的变量名: String sçèêûá¢é£¥

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

事实并非如此-许多特殊字符实际上对标识符有效。定义如下:

标识符是Java字母和Java数字的无限长序列,其中第一个必须是Java字母。
[…]
“Java字母”是方法
character.isJavaIdentifierStart(int)
返回true的字符。
“Java字母或数字”是方法
character.isJavaIdentifierPart(int)
返回true的字符

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

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);
        }
    }
}
publicstaticvoidmain(字符串参数[]){
对于(int i=0;i

ps:很好的示例

以下代码在Java中都是有效的

int Δ = 1;
double π = 3.141592;
String 你好 = "hello";
Δ++;
System.out.println(Δ);
我想说,对于变量名来说,这些是非常特殊的字符


来源:

实际上,Java标识符中允许使用大量特殊字符。例如,您可以拥有每个货币符号,以及所有10个连续字符(而不仅仅是u)

更奇怪的是,你可能有看不见的字符,或者导致文本被向后打印

以下程序的标识符中有
\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);
用于(字符c‮h=0;c‮h
这将打印编译并运行的标识符中允许的所有特殊字符


@Pradeep。你的意思是为什么他们不能以特殊字符开头?可能是重复的,因为我也尝试过,但只能到:-^ ^为止:)需要改进。我认为如果变量名以“特殊”字符开头,例如:Stringèèèèèèèèèèèèèè;
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);