为什么向 long 变量增加值会使它变低?

Why adding value to a long variable makes it lower?

我正在尝试将 System.long a = System.currentTimeMillis() + ((long)30 * 24 * 60 * 60 * 1000); 增加 30 天,但它正在降低价值?为什么?这是我试过的

int days = 30;
long a = System.currentTimeMillis();
long b = a + (days * 24 * 60 * 60 * 1000);

根据我当时运行的代码,结果是:

a = 1646737213282 , b = 1645034245986

为什么 b < a ?

问题是超出了整数范围。最大整数范围从

-2,147,483,648 (-231) to 2,147,483,647 (231-1)

相乘时,它存储为 int。但是,这不是限制。因此,解决方案是将其解析为一个 long。您可以在下面查看我的代码:

int days = 30;
long a = System.currentTimeMillis();
long b = a + ((long)days * 24 * 60 * 60 * 1000);
System.out.println("a = " + a + "       b = " + b);

但是如果要优化代码,这段代码会更好:

long a = System.currentTimeMillis() + ((long)30 * 24 * 60 * 60 * 1000);
System.out.println("a = " + a);

它节省了你的 2 行代码

但是,我也希望你使用一种方法

long addDays(int days){
    return System.currentTimeMillis() + ((long)days * 24 * 60 * 60 * 1000);
}

然后

int a = addDays(30);