Math.min()中的postincrement运算符有趣的行为

时间:2012-11-22 21:59:01

标签: java post-increment

我有一个问题,
  在Java中,Math.min绑定比++更紧密吗?   让我用一个例子说明一下,也许有人可以向我解释为什么我得到了我得到的结果。

这是我运行的方法:

private static void testIncrement() {
    int x=10;
    System.out.println(x++);
    System.out.println(x);

    x=10;
    System.out.println("-----------");
    System.out.println(++x);
    System.out.println(x);

    x=10;
    System.out.println("-----------\n"+x); //10
    x=Math.min(255, x++); 
    System.out.println(x); **//x=10 WHY NOT x=11?**

    x=10;
    System.out.println("-----------\n"+x);
    x=Math.min(255, ++x);
    System.out.println(x);
}

结果是:

10
11
-----------
11
11
-----------
10
10
-----------
10
11

在我放//x=10 WHY NOT x=11?的路线上 我想知道为什么x是10而不是11.也许有人可以向我解释这个。

好像Math.min创建x的副本(此时为10),用于执行Math.min。然后原始x从10增加到11,但仍然是10的副本来自Math.min并覆盖递增的副本。

这有意义吗? 在这种情况下,有没有人解释为什么x是10而不是11?

谢谢

PS - 我完全理解How do the post increment (i++) and pre increment (++i) operators work in Java?

1 个答案:

答案 0 :(得分:4)

让我们解构这一行:

x = Math.min(255, x++); 

x++表示“记住x的原始值;然后递增x;然后表达式的值是原始值”。所有这些都发生在之前分配。所以它相当于:

int tmp = x;               // x = 10, tmp = 10
x = x + 1;                 // x = 11, tmp = 10
x = Math.min(255, tmp);    // x = 10

希望这应该说清楚。特别是,这与Math.min本身无关 - 它只是表现为普通的方法调用。有关详细信息,请参阅section 15.14.2 of the JLS