为什么这个Java表达式没有将最终值转换为long类型?

时间:2017-01-26 20:27:17

标签: java int long-integer multiplication addition

//date is a java.util date
//date.getTime() = 1485462073669
int days = 3600;
long time = date.getTime() + (days * 24 * 60 * 60 * 1000L);

这将导致时间= 344094777669。 如果我投射变量天数,结果会有所不同。

date.getTime() + ((long) days * 24 * 60 * 60 * 1000L)

这将导致时间= 4639062073669

为什么需要将天数转换为类型,以便正确评估表达式?

1 个答案:

答案 0 :(得分:2)

Java是从左到右。

days *  24  *  60  *  60  *  1000L
int  * int  *  int *  int *  long
    int     *  int *  int *  long
           int     *  int *  long
                   int    *  long
                         long

您还可以完成以下操作:

1000L *  days *  24   *   60 * 60
long  *  int  *  int  *  int * int
    long      *  int  *  int * int
             long     *  int * int
                     long    * int
                           long

但......在你的情况下它不应该改变任何东西。我运行你的代码,两种方法都返回相同的结果。也许date.getTime()返回了另一个值?