In Java (and similarly C#) identifier rules, an identifier's first character must be a Unicode letter, or one of the special "letter-like" characters '$' and ''. Both '$' and '' are explicitly permitted as the first character. '#' and '@' are not valid identifier characters in these languages at all (they're reserved for other syntax, like annotations in Java or attributes in C#), so they cannot start an identifier.