Java Unicode 变量名称
我在一个论坛上进行了有趣的讨论,讨论了变量的命名。
撇开约定不谈,我注意到变量具有Unicode字符的名称是合法的,例如,以下内容是合法的:
int \u1234;
但是,例如,如果我给它起名#,它会产生一个错误。根据Sun的教程,如果“以字母开头,美元符号”$“或下划线字符”_“,则有效。
但是 unicode 1234 是一些埃塞俄比亚字符。那么,什么是真正的“字母”呢?
我在一个论坛上进行了有趣的讨论,讨论了变量的命名。
撇开约定不谈,我注意到变量具有Unicode字符的名称是合法的,例如,以下内容是合法的:
int \u1234;
但是,例如,如果我给它起名#,它会产生一个错误。根据Sun的教程,如果“以字母开头,美元符号”$“或下划线字符”_“,则有效。
但是 unicode 1234 是一些埃塞俄比亚字符。那么,什么是真正的“字母”呢?
Unicode 标准定义了什么算作字母。
字母和数字可以从整个 Unicode 字符集中提取,该字符集支持当今世界上使用的大多数书写脚本,包括中文、日文和韩文的大写字集。这允许程序员在其程序中使用用其母语编写的标识符。
“Java 字母”是 Character.isJavaIdentifierStart(int) 方法返回 true 的字符。“Java 字母或数字”是 Character.isJavaIdentifierPart(int) 方法返回 true 的字符。
从文档记录:Character
isJavaIdentifierPart
确定字符(Unicode 码位)是否可能作为第一个字符以外的 Java 标识符的一部分。如果满足以下任一条件,则字符可能是 Java 标识符的一部分:
- 这是一封信
- 它是一个货币符号(如“$”)
- 它是一个连接标点符号字符(如'_')
- 它是一个数字
- 它是一个数字字母(如罗马数字字符)
- 它是一个组合标记
- 它是一个非间距标记
- isIdentifierIgnorable(codePoint) 为字符返回 true
Unicode 字符属于字符类。有一组 Unicode 字符属于“字母”类。
由 Java 确定。但对于标识符,并且更相关。Character.isLetter(c)
Character.isJavaIdentifierStart(c)
Character.isJavaIdentifierPart(c)
有关相关的 Unicode 规范,请参阅此处。