In exploring precisely which characters were permitted in Java identifiers, I have stumbled upon something so extremely curious that it seems nearly ce
I don't see what's the big deal. How does it affect you in anyway?
If a developer wants to obfuscate his code, he can do it with ASCII.
If a developer wants to make his code understandable, he will use the lingua franca of the industry: English. Not only identifiers are ASCII only, but also from common English words. Otherwise, nobody will use or read his code, he can use whatever crazy characters he likes.
Another question might be: Why shouldn't Java allow control characters in its identifiers?
A good principle when designing a language or other system, is to not forbid anything without good cause, since you never know how it might be used, and the less rules implementers and users have to contend with, the better.
It is true that you certainly shouldn't take advantage of this, by actually embedding escapes into your variable names, and you won't see any popular libraries that expose classes with null characters in them.
Certainly, this could be abused, but it isn't the language designers job to protect programmers from themselves in this way, any more than by forcing proper indentation or well-chosen variable names.
The Java Language Specification section 3.8 defers to Character.isJavaIdentifierStart() and Character.isJavaIdentifierPart(). The latter, among other conditions, has Character.isIdentifierIgnorable(), which allows non-whitespace control characters (including whole C1 range, see the link for the list).