【发布时间】:2009-02-04 17:02:01
【问题描述】:
我写了一个将给定数字从天数转换为毫秒数的方法:
private long expireTimeInMilliseconds;
...
public void setExpireTimeInDays(int expireTimeInDays)
{
expireTimeInMilliseconds = expireTimeInDays * 24 * 60 * 60 * 1000;
}
我很难弄清楚我做错了什么。现在我的问题: 这个错误这么明显吗?
修正方法:
private long expireTimeInMilliseconds;
...
public void setExpireTimeInDays(int expireTimeInDays)
{
expireTimeInMilliseconds = ((long) expireTimeInDays) * 24 * 60 * 60 * 1000;
}
如果我在计算之前没有将整数转换为长整数,我会得到一个完全错误的结果。
【问题讨论】:
-
你也可以在常量后面加上一个 L。
-
人们为什么要关闭这个?似乎是一个可能对其他人有所帮助的合理问题。如果是完全重复的,请说出来。
-
你也可以声明常量:24L * 60L...
-
有趣的话题,但我认为这里的实际问题需要改变。 “错误是否明显”很容易受到影响。诸如“为什么 Java 不将其转换为 'long',即使我的变量是 'long' 类型?”之类的东西?似乎是我们在这里实际讨论的内容。
-
@Outlaw 你是对的:“为什么 Java 不将它转换为 'long'”更适合这里。
标签: java overflow integer-overflow