【发布时间】:2018-02-13 17:13:59
【问题描述】:
public static final long ONE_MONTH_INTERVAL = 1000 * 60 * 60 * 24 * 30;
public static final long THREE_MONTHS_INTERVAL = 1000 * 60 * 60 * 24 * 90;
这两行给了我这个警告:
表达式中的数值溢出
确实考虑到 long 可以达到 2,147,483,647 最大值和一个月的毫秒数已经达到 2,592,000,000
我想知道如何避免溢出(除了在几秒钟内转换它)。
顺便说一句,情况如何:
long currentDate = System.currentTimeMillis();
甚至工作?我的意思是自 epoch 以来的毫秒数远大于 3 个月,那么它是如何成功存储到 long 中的呢?
【问题讨论】:
-
2147483647 (2^31 - 1) 是
int的最大值。long的最大值实际上是 9223372036854775807 (2^63 - 1)。如果您使这些原语无符号,最大正值将再次翻倍。另见:docs.oracle.com/javase/tutorial/java/nutsandbolts/…
标签: android timestamp long-integer