以下blockquote取自http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-137265.html
不要在可能容易与等于运算符混淆的地方使用赋值运算符。例如:
if (c++ = d++) { // AVOID! (Java disallows) ... }
应该写成
if ((c++ = d++) != 0) { ... }
我对行
感到困惑if ((c++ = d++) != 0) {
对此的任何澄清都将不胜感激。
答案 0 :(得分:1)
与C等其他语言相比,Java的标量基元(整数等)不能用作布尔值。换句话说,0
无意义true
或false
。只有等于 0
的内容可以是true
或false
。
答案 1 :(得分:1)
在页面的最开始,我可以看到 -
此页面未得到积极维护。文档中的链接可能不起作用,信息本身可能不再有效。该文件的最新修订版于1999年4月20日作出。
if ((c++ = d++) != 0) {
//logic
}
语法甚至无效(使用Java6)。它给了我
The left-hand side of an assignment must be a variable
您需要将c ++分配给某个变量。
答案 2 :(得分:0)
(c++ = d++)
是一个整数表达式,而不是布尔表达式。它评估为c
赋值中分配给的任何整数c++ = d++
。因此if (c++ = d++) {
在java中是非首发。
因此,与0的比较是将整数表达式转换为布尔值所需的。
我认为不言而喻。代码编写如下:
if ((c++ = d++) != 0) {
只是糟糕的编码。首先,比较中的内部分配。然后是其中的后缀运算符。两者都会导致难以阅读的代码块,容易出错的问题,难以维护等等......更好地编写如下:
c = d;
c++;
d++;
if (c == d) {
但你已经知道了。 :)
答案 3 :(得分:0)
他们只是试图说编译器需要if
语句的条件来评估boolean
值。如果您知道自己在做什么,并决定将带有副作用的实际代码作为条件,则需要将表达式求值为boolean
类型的值。
虽然示例中的反模式代码可以在像C这样的编程语言中运行,其中boolean
值实际上是整数(其中0是false
,非零是{{1} }),在Java中执行此操作的正确方法是将结果实际比较为0。