热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

什么是"Java标识符中可忽略的字符"

如何解决《什么是"Java标识符中可忽略的字符"》经验,为你挑选了1个好方法。

我偶然发现了这个文档,并想知道这是什么.显然,您可以在标识符中包含某些控制字符,并忽略它们:

public static void main(String[] args) throws Exception {
    int dummy = 123;
    System.out.println(d?ummy); // Has U+200B after the `d` before the `u`
}

我在JLS中找不到任何相关内容.IntelliJ IDEA在编辑器中给出一个错误,称"dummy"是一个未声明的标识符(但它编译并运行).我猜这是IntelliJ中的一个错误?这些"可忽视的角色"的目的是什么?

(注意:StackOverflow似乎从问题中删除了我的控制字符)



1> Manos Nikola..:

这个矛盾存在一个悬而未决的问题.

总之,编译器对标识符名称匹配确实忽略了这些字符,但JLS没有提到这一点.相反,JLS说:

两个标识符只有在相同时才相同,即每个字母或数字具有相同的Unicode字符.

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

矛盾显而易见:

Character.isJavaIdentifierPart('\u0001')  -> true, so used to compare identifier names
Character.isIdentifierIgnorable('\u0001') -> true, should be ignored actually

我推测Intellij IDEA遵循JLS,或者他们根本不知道可忽略的字符.我没有看到这个bug报告在这里.

至于这些无知的目的是什么,unicode指定了一些布局和格式控制字符.建议在标识符名称中忽略这些字符

它们所代表的效果是风格的或者超出标识符的范围,其次是因为字符本身通常没有可见的显示

显然,目的isIdentifierIgnorable是识别这一类别的人物.例如,它在isIdentifierIgnorable文档中提到它true具有FORMAT常规类别值的字符返回,这些字符是具有unicode General_Category值Cf的字符,它们包含在布局和格式控制字符中


虽然如此,但这并没有回答被问到的问题:*"这些"可忽视的角色"服务的目的是什么?"*
@RealSkeptic:`_`也不是字母或数字,但它在标识符中很重要.:-)
推荐阅读
author-avatar
别想着摆脱_525
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有