[英]postincrement operator interesting behaviour in Math.min()
我有个问题,
在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
出来并覆盖递增的1。
这有意义吗? 有谁能解释为什么x在这种情况下是10而不是11?
谢谢
让我们解构此行:
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节 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.