当前位置: 首页 > 面试题库 >

Java-循环声明之外的逗号运算符

齐鹏程
2023-03-14
问题内容

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

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;

来源:http://codingdict.com/questions/144878

对于代码混淆竞赛或使我的同事困惑,这将是一个绝妙的技巧,但是两个示例都无法编译(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



 类似资料:
  • 问题内容: 为什么以下工作正常? 但是据说这是危险的/不正确的: 是否需要在循环外声明变量? 问题答案: 局部变量的范围应始终尽可能小。 在你的例子我相信是不会使用的外while循环,否则你就不会问这个问题,因为它声明的内部while循环不会是一个选项,因为它不会编译。 所以,既然是不使用外循环,在尽可能小的范围是内 while循环。 所以,答案是着重那绝对应该被while循环内声明。没有,没有,

  • 问题内容: 我一直想知道,一般而言,在循环之前声明一个扔掉的变量(而不是在循环内部重复)是否会产生(性能)差异?Java中的一个例子(毫无意义): a)循环前声明: b)循环内的声明(反复): a或b哪个更好? 我怀疑重复变量声明(示例b)在理论上会产生更多开销,但是编译器足够聪明,因此无关紧要。示例b的优点是更紧凑,并将变量的范围限制在使用它的地方。尽管如此,我还是倾向于根据示例a进行编码。 问

  • C++ 运算符 使用逗号运算符的为了把几个表达式串在一起。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值。从本质上讲,逗号的作用是导致一系列运算被顺序执行。 最右边的那个表达式的值将作为整个逗号表达式的值,其他表达式的值会被丢弃。例如: var = (count=19, incr=10, count+1); 在这里,首先把 count 赋值为 19,把 incr 赋值为 10,然后

  • 逗号运算符的目的是将几个表达式串起来。 以逗号分隔的表达式列表的值是最右侧表达式的值。 本质上,逗号的效果是导致执行一系列操作。 其他表达式的值将被丢弃。 这意味着右侧的表达式将成为整个逗号分隔表达式的值。 例如 - var = (count = 19, incr = 10, count+1); 这里首先指定计数值19,指定incr值10,然后将count加1,最后指定var最右边表达式的值,c

  • 问题内容: 在循环内部声明变量是否不好?在我看来,这样做,如下面的第一个代码块所示,将使用第二次的十倍的内存…由于在循环的每次迭代中都创建了一个新的字符串。这样对吗? 与 问题答案: 在循环内部声明变量是否不好? 一点也不!它将变量本地化到其使用点。 在我看来,如下面的第一个代码块所示,这样做将使用十倍于第二个内存的内存。 编译器可以优化内容以保持内存使用效率。仅供参考:如果您使用关键字告诉您变量

  • 我试图将我的编程风格从命令式切换到声明式,但有一些概念困扰着我,比如当涉及到循环时的性能。例如,我有一个原始数据,在操作它之后,我希望得到3个预期结果:itemsHash、namesHash、rangeItemsHash 为了达到预期的结果,命令式只循环一次,而声明式至少循环3次(、、)。哪一个比较好?在性能上有什么权衡吗?