9

我正在尝试在我的 android 应用程序中做一些基本的计算,以将一个Date.getTime()值与一些计算的东西进行比较。

我在数据库查询期间所做的计算是:

long minus = pauseDays * 24 * 60 * 60 * 1000;

所以基本上我计算pauseDays. 如果pauseDays变大(我说的是 90 天左右),就会发生一些奇怪的事情。计算结果为负数。

奇怪的是,结果应该是7776000000,所以它应该比 小得多Long.MAX_VALUE。谁能向我解释为什么我在这里得到一个负数?

4

1 回答 1

23

原因可能是因为pauseDays是一个int类型,对吧?然后你将它乘以另一串ints,然后将其转换为long.

考虑一下

public class Main {
  public static void main(String[] args) {
    int pauseDays = 90;
    long minus = pauseDays * 24 * 60 * 60 * 1000;
    System.out.println(minus);

    long pauseDaysL = 90L;
    long minusL = pauseDaysL * 24L * 60L * 60L * 1000L;
    System.out.println(minusL);
  }
}

这个的输出是:

-813934592
7776000000

请注意,第一个long minus使用整数来生成其值。第二个long minusL使用所有长整数值。

于 2012-09-27T22:29:05.300 回答