0

我有以下代码和输出:

public static void main(String[] args) {
    long lon = 1000;
    lon = lon * 3600;
    lon = lon * 24;
    lon = lon * 365;

    System.out.println("lon:  " + lon);

    long lon2 = 1000 * 3600 * 24 * 365;
    System.out.println("lon2: " + lon2);
}
lon:  31536000000
lon2: 1471228928

我想某种溢出正在发生lon2,但我似乎无法弄清楚。结果远低于 Long.MAX_VALUE。任何想法?

4

1 回答 1

4

Java 不够聪明,无法在这里猜测您的意图。

你的问题是你在发生溢出的地方乘以ints 。该计算中的每个数字都是int,因此它的结果也是int。在分配时,结果int将转换为long,但到那时为时已晚。

所以使用类似的东西

long lon2 = 1000L * 3600 * 24 * 365;

确保整个计算在longs 中完成。或者,为了安全起见,只需L在每个文字上加上 。使您的意图非常明确:-)

于 2013-04-25T11:46:50.710 回答