0

我最近写了这样的代码片段

public class TestIncrement {

    public static void main(String[] args){
        double a = 12.4; 
        double b = 5.6; 
        a -=b -=b -= b -= b -= b -= b;
        System.out.println(a);
        a-=b; 
        System.out.println(a); 
    }
}

输出是:

12.4
12.4

为什么增量运算符不起作用?

4

4 回答 4

9

-=并且所有其他赋值运算符都是右结合的。这一行:

a -=b -=b -= b -= b -= b -= b;

并不意味着“减少6 倍a的值”。b它的含义与此相同:

a -= (b -= (b -= (b -= (b -= (b -= b)))));

这意味着“减少b的值b,然后减少b的新值b,然后再执行 3 次,然后减少a的最终值b”。b在第一个之后是 0 -=,所以语句的其余部分什么都不做,就像

a-=b;

线。

于 2013-09-08T23:41:57.067 回答
2

它确实有效。你的b变量等于0。

于 2013-09-08T23:41:04.837 回答
1

如果我把括号括起来以便更容易理解,我们会得到:

public class TestIncrement {
    public static void main(String[] args){
        double a = 12.4; 
        double b = 5.6; 
        a -= (b -= (b -= (b -= (b -= (b -= b)))));
        System.out.println(a);
        a -= b; 
        System.out.println(a); 
    }
}

第一条b -= b语句设置b00再减去4次b,结果仍然是0,这显然使 的值a保持不变。即使您再试一次,在该a -= b行中,您仍然会得到相同的结果:12.4 − 0.0 = 12.4.

于 2013-09-08T23:44:00.207 回答
0

通过编写一个更简单的示例,您可以自己解决这个问题。

public static void main(String[] args){
    int a = 1;
    int b = 2;
    int c = 3;

    a -= b -= c;

    System.out.println(a + " " + b + " " + c);
}

你会惊讶地看到输出是2 -1 3
这个原因,上面的代码等于:

public static void main(String[] args){
    int a = 1;
    int b = 2;
    int c = 3;

    b -= c;
    a -= b;

    System.out.println(a + " " + b + " " + c);
}

不要做意大利面条代码。:(

于 2013-09-08T23:45:38.677 回答