Java Unicode变量名

neskvpey  于 2023-11-15  发布在  Java
关注(0)|答案(2)|浏览(111)

我在一个论坛上参加了一个有趣的讨论,我们讨论了变量的命名。
抛开惯例不谈,我注意到变量的名称使用Unicode字符是法律的。例如,以下是法律的:

int \u1234;

字符串
然而,如果我给它命名为#,它会产生一个错误。根据Sun's tutorial,如果 “以字母、美元符号“$"或下划线字符“_"开头,它是有效的。"
但是Unicode 1234是埃塞俄比亚字符,那么什么才是真正的“字母”呢?

ljo96ir5

ljo96ir51#

Unicode标准定义了什么是字母。
Java语言规范第3.8节:
字母和数字可以从整个Unicode字符集中提取,它支持当今世界上使用的大多数书写脚本,包括中文,日语和韩语的大型集合。这允许程序员在他们的程序中使用用母语编写的标识符。
“Java letter”是Character.isJavaIdentifierStart(int)方法返回true的字符。“Java letter-or-digit”是Character.isJavaIdentifierPart(int)方法返回true的字符。
来自isJavaIdentifierPartCharacter文档:
确定字符(Unicode代码点)是否可以作为Java标识符的一部分而不是第一个字符。如果以下任一项为真,则字符可以是Java标识符的一部分:

  • 这是一封信
  • 它是一个货币符号(例如“$”)
  • 它是一个连接标点字符(如'_')
  • 它是一个数字
  • 它是一个数字字母(如罗马数字字符)
  • 它是一个组合标记
  • 它是一个非间隔标记
  • isIdentifierIgnorable(codePoint)为字符返回true
yqlxgs2m

yqlxgs2m2#

Unicode字符分为字符类。有一组Unicode字符属于“letter”类。
对于Java,由Character.isLetter(c)确定。但对于标识符,Character.isJavaIdentifierStart(c)Character.isJavaIdentifierPart(c)更相关。
有关Unicode规范,请参阅此处。

相关问题