我有以下代码和输出:
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。有什么想法吗?
答案 0 :(得分:4)
Java在这里猜测你的意图并不够聪明。
您的问题是您将 int
s 与溢出发生在一起。该计算中的每个数字都是int
,因此其结果也是int
。在分配时,生成的int
会转换为long
,但到那时为时已晚。
所以请使用类似
的内容long lon2 = 1000L * 3600 * 24 * 365;
确保整个计算在long
中完成。或者,为了安全起见,只需在L
上附加每个文字。使你的意图非常明确: - )