2016-01-28 18 views
5

可以在Java變量名稱中使用的字符的規則是什麼?爲什麼我不允許將Java源代碼文件中的字符用作變量名稱?

我有這樣的示例代碼:

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

這不會編譯:

javac Main.java 
Main.java:3: error: illegal character: '\udd1e' 
     int k = 4; 
      ^
1 error 

那麼,爲什麼Java編譯器投擲 '' 的錯誤? (\ uD834 \ uDD1E)

同在ideone.com:http://ideone.com/fnmvpG

+0

您在IDE中設置了哪種編碼? – Jens

+0

@Jens我沒有使用任何IDE。這只是一個簡單的文本文件,我正在從終端編譯。該文件本身是UTF-8編碼的。 –

+0

而你的命令行的編碼設置? – Jens

回答

6

什麼是可以在Java變量名可以用於字符的規則?

規則在標識符的JLS中,在section 3.8。您在Character.isJavaIdentifierPart感興趣:

字符可能是Java標識符的一部分,如果以下任一爲真:

  • 它是一個字母
  • 它是一個貨幣符號(如 '$')
  • 它是一個連接標點符號字符(例如, '_')
  • 它是一個數字
  • 它是一個數字的字母(如羅馬數字字符)
  • 它是一個組合標記
  • 它是一個非空格標記
  • isIdentifierIgnorable(碼點)的字符

返回true當然,這假定你用適當的編碼編譯你的代碼。

你顯然試圖使用的字符是U+1D11E,這是以上任何一個。這是一個音樂高音譜號,它在「符號,其他」類別中。

相關問題