如果在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: //分配长值不会导致溢出 MICROSECONDS_A_DAY = 24L * 60 * 60 * 1000 * 1000; System.out.println(MICROSECONDS_A_DAY); } }
输出结果
500654080 86400000000
尽管我们使用了long变量,但在方案1中,乘法操作基于int,导致int溢出。结果,输出不正确。
在方案2中,我们将乘法运算强制为基于所属的,从而得出正确的结果。