小心分配 Java 中的长值以避免溢出\n


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

示例

实时演示

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

      //Scenario 1:
      //Assigning int value to long causing overflow
      long MICROSECONDS_A_DAY = 24 * 60 * 60 * 1000 * 1000;

      System.out.println(MICROSECONDS_A_DAY);  
   
      //Scenario 2:  
      //Assigning long value causing no overflow
      MICROSECONDS_A_DAY = 24L * 60 * 60 * 1000 * 1000;

      System.out.println(MICROSECONDS_A_DAY);          
   }
}

输出

500654080
86400000000

需要考虑的要点

  • 尽管我们在场景 1 中使用了长变量,但乘法运算基于 int,导致 int 溢出。因此,输出不正确。

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

更新于: 2020 年 6 月 18 日

224 次浏览次数

开启你的 职业

完成课程并获得认证

开始
广告