Java Unicode变量名称

pg-*_*ban 16 java variables unicode

我在一个讨论变量命名的论坛中进行了一次有趣的讨论.

除了惯例之外,我注意到变量具有Unicode字符的名称是合法的,例如以下是合法的:

int \u1234;
Run Code Online (Sandbox Code Playgroud)

但是,如果我给它命名为#,则会产生错误.根据Sun的教程,如果"以字母开头,美元符号为"$"或下划线字符"_",则有效."

但是unicode 1234是一些Ethiopic角色.那真正被定义为"字母"的是什么?

Jon*_*eet 22

Unicode标准定义了什么算作字母.

Java语言规范,第3.8节:

可以从整个Unicode字符集中绘制字母和数字,该字符集支持当今世界中使用的大多数书写脚本,包括中文,日文和韩文的大集.这允许程序员在他们的程序中使用以其本地语言编写的标识符.

"Java letter"是Character.isJavaIdentifierStart(int)方法返回true的字符."Java letter-or-digit"是Character.isJavaIdentifierPart(int)方法返回true的字符.

Character文件isJavaIdentifierPart:

确定字符(Unicode代码点)是否可能是Java标识符的一部分,而不是第一个字符.如果满足以下任何条件,则字符可能是Java标识符的一部分:

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


Vin*_*jip 6

Unicode字符属于字符类。有一组Unicode字符属于“字母”类。

Character.isLetter(c)Java 确定。但标识符,Character.isJavaIdentifierStart(c)Character.isJavaIdentifierPart(c)更相关。

有关相关的Unicode规范,请参见this