我有以下代码和输出:
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不够聪明,无法在这里猜测您的意图。
您的问题是您要在发生溢出的地方乘以int
。该计算中的每个数字都是int
,因此其结果也是int
。赋值后,结果int
将转换为long
,但那时为时已晚。
因此,使用类似
long lon2 = 1000L * 3600 * 24 * 365;
以确保整个计算在
long
内完成。或者,为了安全起见,只需将L
附加在每个文字上。使您的意图非常明确:-)关于java - 乘法时结果不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16213872/