Java Unicode变量名称

时间:2009-09-14 16:39:11

标签: java variables unicode

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

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

int \u1234;

但是,例如,如果我给它命名为#,则会产生错误。根据{{​​3}},如果以字母开头,美元符号“$”或下划线字符“_”,则有效。“

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

2 个答案:

答案 0 :(得分:20)

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

来自Java Language Specification, section 3.8

  

可以绘制字母和数字   整个Unicode字符集,   它支持大多数写脚本   今天在世界上使用,包括   适用于中文,日文和日文的大型套装   韩国人。这允许程序员使用   他们的程序中的标识符   用他们的母语写成。

     

一个   “Java letter”是一个角色   方法   Character.isJavaIdentifierStart(INT)   返回true。一个“Java字母或数字”   是一个方法的字符   Character.isJavaIdentifierPart(INT)   返回true。

来自Character的{​​{1}}文件:

  

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

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

答案 1 :(得分:4)

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

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

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