An identifier is an unlimited-length sequence of Java letters and Java digits, the
first of which must be a Java letter.
IdentifierChars but not a Keyword or BooleanLiteral or NullLiteral
any Unicode character that is a "Java letter"
any Unicode character that is a "Java letter-or-digit"
A "Java letter" is a character for which the method
Character.isJavaIdentifierStart(int) returns true.
A "Java letter-or-digit" is a character for which the method
Character.isJavaIdentifierPart(int) returns true.
The "Java letters" include uppercase and lowercase ASCII Latin letters A-Z (\u0041-
\u005a), and a-z (\u0061-\u007a), and, for historical reasons, the ASCII dollar sign
($, or \u0024) and underscore (_, or \u005f). The dollar sign should be used only in
mechanically generated source code or, rarely, to access pre-existing names on legacy
systems. The underscore may be used in identifiers formed of two or more characters, but
it cannot be used as a one-character identifier due to being a keyword.
The "Java digits" include the ASCII digits 0-9 (\u0030-\u0039).
Anyway, the question I got wrong was:
Which of the following would be a legal module name? (Choose all that apply.)
Of course on top of that, "$" is commonly simply "currency symbol" which may render as a completely different character depending on locale.