问题
I know I can use the comma operator like this
for (int i = 1, j = 15; j>10; i++, j--) {
// do something neat
}
but some articles seem to suggest that the comma operator can be used outside of the for loop declaration, for example
int j = 2, k = 4 ;
int x ;
// Assignment statement with comma operator
x = j + 1, k ;
source: http://www.cs.umd.edu/~clin/MoreJava/ControlFlow/comma.html
or
int x = (expression) ? (i++,2) : 3;
source: https://stackoverflow.com/a/12047433/1084813
This would be a neat trick for a code obfuscation contest or to confuse my colleagues, but neither of the examples will compile (Java 1.6, Eclipse Juno), the error is "The left-hand side of an assignment must be a variable". I tried looking at the compiler settings to see whether it could be forbidden to prevent bad code, but without luck.
What's wrong? Was the comma operator a part of an older specification which later changed? Are the people that wrote those examples using a different Java setup that allows this?
回答1:
What's wrong?
Some of the tricks which work in C don't work in Java.
Was the comma operator a part of an older specification which later changed?
This never worked in Java AFAIK.
Are the people that wrote those examples using a different Java setup that allows this?
Its a common mistake to assume Java is just like C or C++ because it is similar. A good portion of coding mistakes on SO are due to people trying to write C++ in Java and getting confused when it doesn't do what they expect.
BTW: I have made the same mistake assuming C++ is just like Java as my knowledge of C++ is not current.
However some tricks which working Java but perhaps not C.
You can use all currency symbols or which there are a few which look at most the same.
e.g.
if( ⁀ ‿ ⁀ == ⁀ ⁔ ⁀ || ¢ + ¢== ₡)
You can use character which are invisible and c couple which reverse the order the rest of the line when printed. ;)
This program compiles and runs and prints all the odd characters you can use in Java identifiers
for (char ch = 0; ch < Character.MAX_VALUE; ch++)
if (Character.isJavaIdentifierPart(ch) && !Character.isJavaIdentifierStart(ch))
System.out.printf("%04x <%s>%n", (int) ch, "" + ch);
which makes its almost too easy.
http://vanillajava.blogspot.co.uk/2012/08/uses-for-special-characters-in-java-code.html
http://vanillajava.blogspot.co.uk/2012/09/hidden-code.html
回答2:
https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.27
15.27. Expression
<...>
Unlike C and C++, the Java programming language has no comma operator.
来源:https://stackoverflow.com/questions/12601596/java-comma-operator-outside-for-loop-declaration