Ответ 1
Для этого противоречия существует открытая проблема.
Таким образом, эти символы действительно игнорируются для сопоставления имени идентификатора компилятором, но JLS не упоминает об этом. Вместо JLS говорит:
Два идентификатора одинаковы, только если они идентичны, то есть имеют один и тот же символ Юникода для каждой буквы или цифры.
Кроме
"Буква или цифра Java" - это символ, для которого метод 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 или они просто не знают о незнакомых персонажах. Я не вижу отчета об ошибке для этого здесь.
Что касается цели этих игнорируемых, unicode указывает некоторые Макросы и символы управления форматом. Предполагается, что эти символы следует игнорировать в именах идентификаторов как
эффекты, которые они представляют, являются стилистическими или иначе недоступными для идентификаторы, а во-вторых, поскольку сами символы часто имеют нет видимого отображения
Очевидно, целью isIdentifierIgnorable
является идентификация персонажей этой категории. Например, он упоминал в isIdentifierIgnorable documentation, что он возвращает true
для символов, которые имеют общее значение категории FORMAT, которые являются символами с индексом unicode General_Category Cf, которые включены в символы макета и управления форматом