gpt4 book ai didi

java - 乘法时结果不同

转载 作者:行者123 更新时间:2023-12-01 18:49:49 24 4
gpt4 key购买 nike

我有以下代码和输出:

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。有什么想法吗?

最佳答案

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

你的问题是你在发生溢出的地方乘以ints。该计算中的每个数字都是一个 int,因此它的结果也是一个 int。赋值时,结果 int 会转换为 long,但那时已经太晚了。

所以使用类似的东西

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

确保整个计算在long秒内完成。或者,为了安全起见,只需在每个文字上附加 L 即可。让您的意图非常明确:-)

关于java - 乘法时结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16213872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com