当前位置:  开发笔记 > 编程语言 > 正文

Java乘法运算行为

如何解决《Java乘法运算行为》经验,为你挑选了2个好方法。

我写了一个方法来将给定数字从天转换为毫秒:

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,那么我得到一个完全错误的结果.



1> Jon Skeet..:

这很明显吗?我想这取决于你使用Java多长时间以及你需要多少次处理毫秒.当然,它应该可以持续大约24天......

我认为最大的提示应该是System.currentTimeMillis()返回一个long.这是一个很好的迹象,可以在几毫秒内变大.您设置的变量类型也应该是一个很好的提示.

当然,您必须知道如果使用整数进行算术运算,结果将是int溢出时的回绕.这是否足够明显可以辩论,但这将是一个非常毫无意义的讨论.在C#中,如果你打开溢出检查,你很快就会发现这个错误 - 但是没有多少开发人员这样做(事实上,我不是,但我可能应该这样做).



2> Bill the Liz..:

是的,如果你以前做过,那就很明显了.每当你看到一串数字成倍增加时,你应该自动开始考虑整数溢出错误.在这种情况下,如果expireTimeInDays超过24,则设置为溢出.从技术上讲,任何时候使用整数时都应该考虑溢出错误,但是像这样增加一组它们应该是一个非常大的红旗.

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有