According to the Java Language Specification, an identifier (which is a method, class, label, or variable name) can start with "a Java letter." Elsewhere "a Java letter" is defined as basically any Unicode character used as a letter in some alphabet; there's a formal definition in terms of Unicode ranges in the spec (section 20.5.16). The characters "_" (underscore) and "$" (dollar sign) are also considered "Java letters." There's a method Character.isJavaLetter() which takes a slightly broader view, and I'm actually not sure if the latest version of the spec uses this same definition: according to this method's Javadoc, a Java letter can be not only "$" but any currency symbol, and not only "_" but any "connecting punctuation character." Anyway, "&" is not legal.