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


在 Java 中对整型值进行运算时,我们需要了解 int 类型的下溢和上溢条件。鉴于在 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 中使用了一个 long 变量,但乘法运算基于 int 导致 int 上溢。因此,输出不正确。

  • 在场景 2 中,我们强制乘法运算基于长整型,从而得到了正确的结果。

更新于:2020 年 6 月 18 日

225 次观看

启动您的 职业生涯

完成该课程以获得认证

开始学习
广告