簡體   English   中英

Android / Java:long不會超過max_value而變為負數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM