用Java计算产品,术语与“ for”循环,结果不同

问题描述

考虑:

    long y = 1;
    for (int i = 49; i > 43; i--) {
        y*= i;
    }

    long x = 49*48*47*46*45*44; // = 1478412928
    long y                      // = 10068347520

尽管计算是偶数的,为什么结果会有所不同?

有解释吗?

解决方法

49*48*47*46*45*44int文字的乘法,因此执行int乘法,得到一个int值。在这种情况下(由于结果大于Integer.MAX_VALUE)会溢出,然后再将结果分配给long变量。因此结果不正确。

将其更改为49L*48*47*46*45*44(long)49*48*47*46*45*44以执行long乘法。

另一方面,在您的第一个计算中,您从一个long变量开始,其值为1,循环将longint乘以每次迭代都执行long乘法,因此不会发生溢出。