我在一个论坛上参加了一个有趣的讨论,我们讨论了变量的命名。
抛开惯例不谈,我注意到变量的名称使用Unicode字符是法律的。例如,以下是法律的:
int \u1234;
字符串
然而,如果我给它命名为#,它会产生一个错误。根据Sun's tutorial,如果 “以字母、美元符号“$"或下划线字符“_"开头,它是有效的。"
但是Unicode 1234是埃塞俄比亚字符,那么什么才是真正的“字母”呢?
我在一个论坛上参加了一个有趣的讨论,我们讨论了变量的命名。
抛开惯例不谈,我注意到变量的名称使用Unicode字符是法律的。例如,以下是法律的:
int \u1234;
字符串
然而,如果我给它命名为#,它会产生一个错误。根据Sun's tutorial,如果 “以字母、美元符号“$"或下划线字符“_"开头,它是有效的。"
但是Unicode 1234是埃塞俄比亚字符,那么什么才是真正的“字母”呢?
2条答案
按热度按时间ljo96ir51#
Unicode标准定义了什么是字母。
Java语言规范第3.8节:
字母和数字可以从整个Unicode字符集中提取,它支持当今世界上使用的大多数书写脚本,包括中文,日语和韩语的大型集合。这允许程序员在他们的程序中使用用母语编写的标识符。
“Java letter”是Character.isJavaIdentifierStart(int)方法返回true的字符。“Java letter-or-digit”是Character.isJavaIdentifierPart(int)方法返回true的字符。
来自
isJavaIdentifierPart
的Character
文档:确定字符(Unicode代码点)是否可以作为Java标识符的一部分而不是第一个字符。如果以下任一项为真,则字符可以是Java标识符的一部分:
yqlxgs2m2#
Unicode字符分为字符类。有一组Unicode字符属于“letter”类。
对于Java,由
Character.isLetter(c)
确定。但对于标识符,Character.isJavaIdentifierStart(c)
和Character.isJavaIdentifierPart(c)
更相关。有关Unicode规范,请参阅此处。