我有一个问题,
在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?
答案 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。