繁体   English   中英

后增量运算符在Math.min()中的有趣行为

[英]postincrement operator interesting behaviour in Math.min()

我有个问题,
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的副本(当前为10),用于执行Math.min 然后,原始x从10增加到11,但是仍然是10的副本从Math.min出来并覆盖递增的1。

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

谢谢

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

让我们解构此行:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM