2009-09-14 21 views
13

我在討論變量命名的論壇中進入了一個有趣的討論。Java Unicode變量名

約定之外,我發現它是合法的變量有一個Unicode字符的名稱,例如以下是合法的:

int \u1234; 

但是,如果我的例子給了它的名字#它會產生一個錯誤。根據Sun's tutorial,如果「以字母開頭,美元符號」$「或下劃線字符」_「開頭,則該符號有效。」

但是unicode 1234是一些Ethiopic字符。那麼真正被定義爲「字母」的是什麼?

回答

18

Unicode標準定義什麼算作一個字母。

Java Language Specification, section 3.8

字母和數字可以從 得出整個Unicode字符集, 今天它支持在世界 使用最編寫腳本,包括 大集中國,日語,和 朝鮮語。這允許程序員在他們的程序中使用 標識符,這些標識符是用本地語言編寫的 。

甲 「的Java字母」 是其中 方法 Character.isJavaIdentifierStart(INT) 返回true的字符。 「Java字母或數字」 是字符,其方法 Character.isJavaIdentifierPart(int) 返回true。

Character documenation爲isJavaIdentifierPart

確定是否字符(Unicode代碼點)可以是Java標識符作爲其他 比第一個字符的一部分。 字符可以是Java標識符的一部分,如果任何以下的爲真:

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

Unicode字符落入字符類返回true。有一組Unicode字符落入類「字母」中。

Character.isLetter(c)爲Java確定。但對於標識符,Character.isJavaIdentifierStart(c)Character.isJavaIdentifierPart(c)更相關。請參考this