8

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?

13
  • 10
    The JLS says: Unlike C and C++, the Java programming language has no comma operator. Commented Sep 26, 2012 at 12:24
  • 8
    "or to confuse my colleagues". Most people try to make their code MORE readable, not less. Commented Sep 26, 2012 at 12:26
  • Its incorrect syntax, also why would you want to confuse your collegues? The code will become legacy soon enough without extra obfuscation efforts. Commented Sep 26, 2012 at 12:26
  • Confuse only for fun, of course, not to be used in serious code. The compiler says that "The left-hand side of an assignment must be a variable" Commented Sep 26, 2012 at 12:30
  • Don't do that, the readability is messed up. Commented Sep 26, 2012 at 12:36

2 Answers 2

14

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.

Sign up to request clarification or add additional context in comments.

2 Comments

Java has comma separator. Source : JLS
@iamcreasy java doesnt have a comma operator its only a seperator. In your source its given that its a seperator and not an operator. There's a difference.
8

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 c‮h = 0; c‮h < Character.MAX_VALUE; c‮h++)
    if (Character.isJavaIdentifierPart(c‮h) && !Character.isJavaIdentifierStart(c‮h))
        System.out.printf("%04x <%s>%n", (int) c‮h, "" + c‮h);

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

7 Comments

"This would be a neat trick for a code obfuscation contest or to confuse my colleagues,"
"Some of the trick which work in C don't work in Java." Not sure there is much more you can say.
The first example was taken from an article about Java and the second one was found under a Java related question on SO! This is not just some C code that I'm trying to make work in Java.
@JohnEye Hopefully that is a better attempt at answering your questions.
@PeterLawrey If I search using the term "connecting character" on JLS nothing shows up. Where did you find these information?
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.