java操作大数字内存溢出问题
请看下面的程序:
publicstaticvoid main(String[] args) {
long a=365*24*60*60;
long b=24*60*60;
System.out.println(a/b);
}
很明显,long型数据a是b的365倍,程序输出为:
365
然后我们稍作修改,如下:
publicstaticvoid main(String[] args) {
long a=365*24*60*60*1000;
long b=24*60*60*1000;
System.out.println(a/b);
}
此时,a依然是b的365倍,但是程序输出为:
17
这样一个不合理的结果就是内存溢出导致的。这个运算完全是由int来执行的,只有结束时,才将结果转换为long,因而导致了内存溢出。
可以通过如下修改来解决:
publicstaticvoid main(String[] args) {
long a=365L*24*60*60*1000;
long b=24L*60*60*1000;
System.out.println(a/b);
}
这样就可以保证运算是由long型数据来执行的。