考虑这段代码:
// calculate age of dog
long interval = 1000*60*60*24*30;
int ageInWeeks = Weeks.weeksBetween(geburtsDatumDateTime, nowDateTime).getWeeks();
if (ageInWeeks < 20){
// wöchentlich
interval = 1000*60*60*24*7;
} else if (ageInWeeks >= 20 && ageInWeeks < 52){
// 2-wöchentlich
interval = 1000*60*60*24*14;
} else if (ageInWeeks >= 52){
// monatlich
interval = 1000*60*60*24*30;
}
调试器显示,在ageInWeeks&gt; = 52的情况下,间隔为:-1702967296,但应该是:2592000000
减号表示存在某种溢出错误。 但是,Java中long的最大值是2E63-1,即:9.2233E18
我在这里缺少什么? Android的最大值是否较小?
答案 0 :(得分:3)
您正在计算32位有符号整数,计算溢出,然后将结果分配给long。
通过使其中一个操作数很长,以64位进行计算。例如,将L
添加到其中一个操作数以使其成为长文字:
interval = 1000L*60*60*24*30;
答案 1 :(得分:0)
正如拉尔托所说,添加一个&#39; L&#39;应该让它发挥作用。 但是,为了避免将来出现这类错误,您可以使用TimeUnit类(在Android SDK中提供):
long interval = TimeUnit.DAYS.toMillis(30);