为什么我不允许将Java源代码文件中的字符用作变量名?

Kor*_*gay 5 java compilation character-encoding

Java变量名中可以使用的字符有哪些规则?

我有这个示例代码:

public class Main {
    public static void main(String[] args)  {
        int k = 4;
        System.out.println(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个不会编译:

javac Main.java
Main.java:3: error: illegal character: '\udd1e'
        int k = 4;
              ^
1 error
Run Code Online (Sandbox Code Playgroud)

那么为什么Java编译器会为''抛出错误?(\ uD834\uDD1E)

在ideone.com中也是如此:http://ideone.com/fnmvpG

Jon*_*eet 6

Java变量名中可以使用的字符有哪些规则?

规则在标识符的JLS中,在3.8节中.你有兴趣Character.isJavaIdentifierPart:

如果满足以下任何条件,则字符可能是Java标识符的一部分:

  • 这是一封信
  • 它是货币符号(例如'$')
  • 它是一个连接标点字符(例如'_')
  • 这是一个数字
  • 它是一个数字字母(例如罗马数字字符)
  • 它是一个组合标记
  • 它是一个非间距标记
  • isIdentifierIgnorable(codePoint)为字符返回true

当然,这假设您使用适当的编码编译代码.

您显然尝试使用的角色是U + 1D11E,这不是上述情况.这是一个音乐高音谱号,属于"符号,其他"类别.