在 Java 中谨慎分配长值以避免溢出\

java programming java8object oriented programming

如果在 Java 中对整数值进行操作,我们需要注意 int 的下溢和溢出情况。考虑到 Java 中的 int 数据类型是 32 位有符号的二进制补码整数,其最小值为 -2,147,483,648,最大值为 2,147,483,647。如果某个值超出了可能的最大值,则该值将返回到最小值并从该最小值继续。类似地,它也会发生在小于最小值的值上。请考虑以下示例。

示例

public class Tester {
   public static void main(String[] args) {

      //场景 1:
      //将 int 值赋给 long 导致溢出
      long MICROSECONDS_A_DAY = 24 * 60 * 60 * 1000 * 1000;

      System.out.println(MICROSECONDS_A_DAY);  
   
      //场景 2:  
      //将 long 值赋给 long 不导致溢出
      MICROSECONDS_A_DAY = 24L * 60 * 60 * 1000 * 1000;

      System.out.println(MICROSECONDS_A_DAY);          
   }
}

输出

5006540​​80
86400000000

需要考虑的要点

  • 虽然我们使用了 long 变量,但场景 1 中的乘法运算是基于 int 的,这导致 int 溢出。因此,输出不正确。

  • 在场景 2 中,我们强制将乘法运算归为基于 int 的,从而得到正确的结果。


相关文章