views:

114

answers:

3

Java allows identifier to start with or contain $ (dollar sign). e.g int a$b;

But why # is not allowed in an identifier? What is the specific reason? Is # an operator or something in Java? e.g int a#b;

+1  A: 

Variables can contain letters, digits, underscores and dollar signs - excluding #, @, ~ ,`

I guess this is for the sake of readability - int s#@t; seems odd.

Bozho
+2  A: 

I doubt there was a specific reason for disallowing # as much as there was a general aversion to punctuation in identifiers (which could look like operators). Special exceptions were made in order to deal with WORD_SEPARATION and Inner$Classes.

In C and C++, on which Java's syntax is based, # is used for preprocessor directives.

dan04
+7  A: 

I'd say that it is a combination of readability and the historical antecedents of the language. Remember that the Java syntax was designed to be easy-on-the-eye for C and C++ programmers. (And as @dan04 points out, the # character is significant in most dialects of C and C++.)

Incidentally, while $ is technical legal in Java identifiers, it is reserved for use by compilers, code generators and other things. If you use $ in identifiers in your source code, you risk getting into trouble with collisions with synthetic identifiers produced by (for example) the javac compiler.

Stephen C