Java 实现是否必须支持以非 ASCII 的 Unicode 字母开头的标识符?



根据Java语言规范Java SE 8 Edition(第3.8节),Java字母似乎必须包括ASCII字母

"Java字母"包括大写和小写ASCII拉丁字母A-Z(\u0041-\u005a)和A-Z(\u0061-\u007a),以及,对于历史原因,ASCII下划线(_,或\u005f)和美元符号($,或\u0024)。$符号只能用于机械生成源代码,或者很少访问遗留系统上预先存在的名称系统。

但可能不包括其他Unicode字母(因为以下句子包含可能而非必须):

字母和数字可以从整个Unicode字符集中提取,它支持当今世界上使用的大多数书写脚本,包括中文、日语和韩语的大型套装。这允许程序员在程序中使用标识符用他们的母语写的。

即使实现不支持标识符中的非ASCII字母,它也符合规范,这正确吗?

如果是这样的话,那么">这允许程序员在用母语编写的程序中使用标识符。"这句话没有多大意义,因为它建议使用可能不是所有实现都支持的功能。

我想你误解了"may"这个词的用法。这句话的意思是"允许从整个Unicode字符集中绘制字母和数字,…">

因此,实现必须支持整个Unicode集。

最新更新