12

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

4

3 回答 3

19

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

标识符是 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);
        }
    }
}

ps:@PeterLawrey 博客上的好例子

于 2012-10-12T10:46:37.310 回答
15

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

if( ⁀ ‿ ⁀ == ⁀ ⁔ ⁀ || ¢ + ¢== ₡)

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

以下程序\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);

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

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

于 2012-10-12T10:52:46.567 回答
8

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

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

我会说这些对于变量名来说是非常特殊的字符。

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

于 2012-10-12T10:51:28.047 回答