Java赋值运算符

时间:2015-03-02 04:00:20

标签: java variable-assignment equality convention

以下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) {

对此的任何澄清都将不胜感激。

4 个答案:

答案 0 :(得分:1)

与C等其他语言相比,Java的标量基元(整数等)不能用作布尔值。换句话说,0无意义truefalse。只有等于 0的内容可以是truefalse

答案 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。