繁体   English   中英

为什么此Java表达式不将最终值转换为long类型?

[英]Why does this Java expression not cast the final value to type long?

//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

为什么需要将天强制转换为类型长才能使表达式正确求值?

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()返回了另一个值?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM