小心分配 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 中,我们强制乘法运算基于归属,得到正确的结果。
广告