[英]Android / Java: long gets negative without exceeding max_value
我正在嘗試在我的Android應用程序中做一些基本的計算,以比較Date.getTime()
值和一些計算的東西。
我在數據庫查詢期間進行的計算是:
long minus = pauseDays * 24 * 60 * 60 * 1000;
所以基本上我計算了pauseDays
的毫秒值。 如果pauseDays
變得更大(我說的是大約90天左右),就會發生一些奇怪的事情。 計算結果為負數。
奇怪的是,結果應該是7776000000
,所以它應該小於Long.MAX_VALUE
。 有人可以向我解釋為什么我在這里得到負數嗎?
原因可能是因為pauseDays
是一個int
類型,對吧? 然后你將它乘以另一堆int
, 然后將其轉換為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
使用所有長整數值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.