我编写了一种方法,可以将给定的数字从几天转换为毫秒:

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;
}

如果在计算之前不将整数转换为很长的时间,则会得到完全错误的结果。

最佳答案

很明显吗?我猜这取决于您使用Java多长时间以及必须处理多少毫秒。当然,最多可以保留24天左右...

我认为最大的提示应该是System.currentTimeMillis()返回long。这很好地表明了毫秒数可能会变大。您要设置的变量的类型也应该是一个很好的提示。

当然,您还必须了解,如果使用int进行算术运算,则结果将是int,并在溢出时进行环绕。是否足够明显尚有争议,但这将是毫无意义的讨论。在C#中,如果您打开了溢出检查功能,您会很快发现该错误-但随后很少有开发人员这样做(实际上,我可能不会这样做)。

09-06 00:04