我写了一个方法将给定数字从天数转换为毫秒数:
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;
}
如果我在计算之前不将整数转换为 long,我会得到一个完全错误的结果。
最佳答案
很明显吗?我想这取决于您使用 Java 的时间以及您必须处理毫秒数的次数。当然,最多 24 天左右应该没问题...
我觉得最大的提示应该是System.currentTimeMillis()
返回一个long
。这是一个很好的迹象,表明毫秒数可以变大。您设置的变量类型也应该是一个很好的提示。
当然,您还知道如果您对整数进行算术运算,结果将是int
,并在溢出时回绕。这是否足够明显可以进行辩论,但这将是一个毫无意义的讨论。在 C# 中,如果您打开溢出检查,您会很快发现错误 - 但没有多少开发人员这样做(事实上,我没有这样做,尽管我可能应该这样做)。
关于Java乘法运算行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/512266/