Java – 用于循环声明的逗号运算符

我知道我可以像这样使用逗号运算符

for (int i = 1, j = 15; j>10; i++, j--) { // do something neat } 

但是有些文章似乎暗示逗号运算符可以在for循环声明之外使用,例如

 int j = 2, k = 4 ; int x ; // Assignment statement with comma operator x = j + 1, k ; 

来源: http : //www.cs.umd.edu/~clin/MoreJava/ControlFlow/comma.html

要么

 int x = (expression) ? (i++,2) : 3; 

来源: https : //stackoverflow.com/a/12047433/1084813

这对于代码混淆竞赛或混淆我的同事来说是一个巧妙的技巧,但两个示例都不会编译(Java 1.6,Eclipse Juno),错误是“赋值的左侧必须是变量”。 我试着查看编译器设置,看看是否可以禁止防止错误的代码,但没有运气。

怎么了? 逗号运算符是旧规范的一部分,后来又改变了吗? 使用不同Java设置编写这些示例的人是否允许这样做?

怎么了?

在C中工作的一些技巧在Java中不起作用。

逗号运算符是旧规范的一部分,后来又改变了吗?

这在Java AFAIK中从未奏效。

使用不同Java设置编写这些示例的人是否允许这样做?

假设Java的常见错误就像C或C ++一样,因为它类似。 SO上编码错误的很大一部分原因是人们试图用Java编写C ++,并且当它没有达到他们期望的效果时会感到困惑。

顺便说一句:我犯了同样的错误,假设C ++和Java一样,因为我对C ++的了解不是最新的。


然而,一些工作Java但但也许不是C的技巧。

您可以使用所有货币符号,也可以使用几个看起来最相符的货币符号。

例如

 if( ⁀ ‿ ⁀ == ⁀ ⁔ ⁀ || ¢ + ¢== ₡) 

您可以使用不可见的字符和c,在打印时可以反转其余部分的顺序。 ;)

该程序编译并运行并打印您可以在Java标识符中使用的所有奇数字符

 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); 

这让它变得非常简单。

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

https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.27

15.27。 表达

<...>

与C和C ++不同,Java编程语言没有逗号运算符。