在 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); } }
输出
500654080 86400000000
需要考虑的要点
虽然我们使用了 long 变量,但场景 1 中的乘法运算是基于 int 的,这导致 int 溢出。因此,输出不正确。
在场景 2 中,我们强制将乘法运算归为基于 int 的,从而得到正确的结果。