为什么这个Java表达式不将最终值强制转换为long类型?
这将导致时间=344094777669。 如果我投变量天,结果会不同为什么这个Java表达式不将最终值强制转换为long类型?,java,int,long-integer,multiplication,addition,Java,Int,Long Integer,Multiplication,Addition,这将导致时间=344094777669。 如果我投变量天,结果会不同 //date is a java.util date //date.getTime() = 1485462073669 int days = 3600; long time = date.getTime() + (days * 24 * 60 * 60 * 1000L); 这将导致时间=4639062073669 为什么需要将days转换为long类型才能正确计算表达式?Java是从左到右的。 date.getTime()
//date is a java.util date
//date.getTime() = 1485462073669
int days = 3600;
long time = date.getTime() + (days * 24 * 60 * 60 * 1000L);
这将导致时间=4639062073669
为什么需要将days转换为long类型才能正确计算表达式?Java是从左到右的。
date.getTime() + ((long) days * 24 * 60 * 60 * 1000L)
您还可以执行以下操作:
days * 24 * 60 * 60 * 1000L
int * int * int * int * long
int * int * int * long
int * int * long
int * long
long
但是。。。在你的情况下,它不应该改变任何事情。我运行您的代码,两种方法返回相同的结果。也许
date.getTime()
返回了另一个值?我更想知道为什么会发生这种情况。第二个表达式是正确的,但我想知道为什么我需要强制演员。根据第一个链接,所有的数学运算都是用最大的数据类型来完成的,所以所有的变量不都应该转换为长的吗?特别是因为最后一个数字被定义为一个长类型。如果date是同一个对象,我看不出这段代码会给出不同的结果。将int转换为long不会改变任何内容。您确定这两种情况下的日期相同吗?是日期对象没有改变。我尝试了你的代码,但是我得到了相同的结果。但是3600*24*60*60
不会溢出int
。是的,但是等式的前半部分看起来不是311040000*1000L吗?311040000不会使整型溢出。然后乘以long将适合于long。并且没有日期。getTime()每次都是相同的。我正在通过Intellij计算表达式。
1000L * days * 24 * 60 * 60
long * int * int * int * int
long * int * int * int
long * int * int
long * int
long