哪些声明有效?

Raj*_*ore 5 java ide unicode scjp intellij-idea

选择三个正确的答案(有效的声明)。

(一种) char a = '\u0061';

(b) char 'a' = 'a';

(C) char \u0061 = 'a';

(d) ch\u0061r a = 'a';

(e) ch'a'r a = 'a';

答案:(a),(c)和(d)

书:

Java SCJP认证程序员指南(第三版)

有人可以解释一下选项(c)和(d)的原因吗,因为IDE(IntelliJ IDEA)用红色的文字显示了它:

无法解析符号“ u0063”

如IntelliJ IDEA所示

And*_*lko 4

编译器可以识别 Unicode 转义并将其转换为 UTF-16。ch\\u0061r将成为char有效的原始类型。故D选项正确。

\n\n
\n

3.3. Unicode 转义

\n\n

Java 编程语言的编译器(“Java 编译器”)首先识别其输入中的 Unicode 转义符,将 ASCII 字符 \\u 后跟四个十六进制数字转换为 UTF-16 代码单元 (\xc2\xa73.1)指示十六进制值,并不变地传递所有其他字符。

\n
\n\n

\\u0061将被翻译为a可用于形成标识符的有效 Java 字母。故选项C正确。

\n\n
\n

3.8. 身份标识

\n\n

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

\n\n
Identifier:\n    IdentifierChars but not a Keyword or BooleanLiteral or NullLiteral\nIdentifierChars:\n    JavaLetter {JavaLetterOrDigit}\nJavaLetter:\n    any Unicode character that is a "Java letter"\nJavaLetterOrDigit:\n    any Unicode character that is a "Java letter-or-digit"\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n

“Java 字母”包括大写和小写 ASCII 拉丁字母 AZ ( \\u0041-\\u005a) 和 az ( \\u0061-\\u007a),并且由于历史原因,还包括 ASCII 美元符号 ( $, 或\\u0024) 和下划线 ( _, 或\\u005f)。美元符号只能用在机械生成的源代码中,或者很少用于访问遗留系统上预先存在的名称。下划线可以用在由两个或多个字符组成的标识符中,但由于是关键字,因此不能用作单字符标识符。

\n
\n