0

我正在阅读一本电子书:

int :b;
int e#;

不是合法的标识符,但我不明白为什么“:”和“#”不是合法的标记。你有什么主意吗?

4

3 回答 3

7

因为Java 语言规范是这么说的:

标识符是 Java 字母和 Java 数字的无限长度序列,其中第一个必须是 Java 字母。

Identifier:
    IdentifierChars but not a Keyword or BooleanLiteral or NullLiteral

IdentifierChars:
    JavaLetter
    IdentifierChars JavaLetterOrDigit

JavaLetter:
    any Unicode character that is a Java letter (see below)

JavaLetterOrDigit:
    any Unicode character that is a Java letter-or-digit (see below)

“Java 字母”是 Character.isJavaIdentifierStart(int) 方法返回 true 的字符。

“Java 字母或数字”是 Character.isJavaIdentifierPart(int) 方法返回 true 的字符。

“Java 字母”包括大写和小写 ASCII 拉丁字母 AZ (\u0041-\u005a) 和 az (\u0061-\u007a),以及由于历史原因,ASCII 下划线(_ 或 \u005f)和美元符号($,或 \u0024)。$ 字符应仅用于机械生成的源代码中,或者很少用于访问遗留系统上预先存在的名称。

“Java 数字”包括 ASCII 数字 0-9 (\u0030-\u0039)。

字母和数字可能来自整个 Unicode 字符集,它支持当今世界上使用的大多数书写脚本,包括中文、日文和韩文的大型集。这允许程序员在他们的程序中使用以他们的母语编写的标识符。

于 2012-09-10T12:21:50.457 回答
1

有效标识符在JLS #3.8中定义。尤其:

“Java 字母”是 Character.isJavaIdentifierStart(int) 方法返回 true 的字符。

“Java 字母或数字”是 Character.isJavaIdentifierPart(int) 方法返回 true 的字符。

这两行输出 false,这使您的两个标识符无效:

System.out.println(Character.isJavaIdentifierPart(':'));
System.out.println(Character.isJavaIdentifierPart('#'));

请注意,有效的标识符包括 AZ、az、_、$ 以及许多“外来”字符。例如,这是一个有效的标识符:

int a_£à胥;
于 2012-09-10T12:22:35.667 回答
0

JLS

An identifier is an unlimited-length sequence of Java letters and Java digits, 
the first of which must be a Java letter. 

..

The "Java letters" include uppercase and lowercase ASCII Latin letters A-Z (\u0041-\u005a), 
and a-z (\u0061-\u007a), and, for historical reasons, the ASCII underscore (_, or \u005f) 
and dollar sign ($, or \u0024). The $ character should be used only in mechanically generated 
source code or, rarely, to access pre-existing names on legacy systems. 
于 2012-09-10T12:23:05.993 回答