小心为 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 中,我们强制乘法运算基于长整型,从而得到了正确的结果。
广告