我在討論變量命名的論壇中進入了一個有趣的討論。Java Unicode變量名
約定之外,我發現它是合法的變量有一個Unicode字符的名稱,例如以下是合法的:
int \u1234;
但是,如果我的例子給了它的名字#它會產生一個錯誤。根據Sun's tutorial,如果「以字母開頭,美元符號」$「或下劃線字符」_「開頭,則該符號有效。」
但是unicode 1234是一些Ethiopic字符。那麼真正被定義爲「字母」的是什麼?
我在討論變量命名的論壇中進入了一個有趣的討論。Java Unicode變量名
約定之外,我發現它是合法的變量有一個Unicode字符的名稱,例如以下是合法的:
int \u1234;
但是,如果我的例子給了它的名字#它會產生一個錯誤。根據Sun's tutorial,如果「以字母開頭,美元符號」$「或下劃線字符」_「開頭,則該符號有效。」
但是unicode 1234是一些Ethiopic字符。那麼真正被定義爲「字母」的是什麼?
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(碼點)的字符
Unicode字符落入字符類返回true。有一組Unicode字符落入類「字母」中。
由Character.isLetter(c)
爲Java確定。但對於標識符,Character.isJavaIdentifierStart(c)
和Character.isJavaIdentifierPart(c)
更相關。請參考this。