闲话不说,先上代码:
int i=16000000;
long j=i*i; //方法1
long x=(long)i*i; //方法2
System.out.println(i);
System.out.println(j);
System.out.println(x);
输出为:
16000000
-1525678080
256000000000000
方法1的结果溢出,由于方法1的乘式为两个int型的数字相乘,所以乘式得到的结果以int型保存再赋给变量j。方法2可以强制表达式中所有的计算都用long运算来完成,这样结果就不会溢出。