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

Joh*_*Eye 7 java for-loop variable-assignment comma-operator assignment-operator

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

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

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

int j = 2, k = 4 ;
int x ;
// Assignment statement with comma operator
x = j + 1, k ;
Run Code Online (Sandbox Code Playgroud)

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

要么

int x = (expression) ? (i++,2) : 3;
Run Code Online (Sandbox Code Playgroud)

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

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

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

184*_*615 12

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

15.27.表达

<...>

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

  • @iamcreasy java没有逗号运算符,它只是一个分隔符.在你的来源中,它给出了它的分离器而不是操作员.有区别. (2认同)

Pet*_*rey 7

怎么了?

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

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

这在Java AFAIK中从未奏效.

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

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

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


然而一些工作Java但但也许不是C.

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

例如

if( ? ? ? == ? ? ? || ¢ + ?== ?)
Run Code Online (Sandbox Code Playgroud)

您可以使用不可见的字符和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);
Run Code Online (Sandbox Code Playgroud)

这使得它几乎太容易了.

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

  • 这很酷,但它与问题有什么关系? (8认同)
  • "对于代码混淆比赛来说,这将是一个巧妙的伎俩,或者让我的同事感到困惑," (2认同)