0

我有一个问题,
In JavaMath.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它用来做Math.min. 然后原件x从 10 增加到 11,但仍然是 10 的副本会出来Math.min并覆盖增加的 1。

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

谢谢

PS - 我完全理解后自增 (i++) 和预自增 (++i) 运算符如何在 Java 中工作?

4

1 回答 1

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——它只是表现得像一个正常的方法调用。有关详细信息,请参阅JLS 的第 15.14.2 节

于 2012-11-22T22:01:11.823 回答