今天生产出了一个测试环境没有测试出来的bug,有点心痛,以此记录,基本类型的合理使用很重要,出错情况为:测试1000万数据可以,但是测试1亿数据失败:失败报错了一个方法
public int getPartNum(int cols,int rows){
int num = (int)(Math.ceil(cols*rows*1.0/256000000)*4*2);
return num+1;
}
结果就是rows为1000万数据测试正常,到了1亿数据一直就是报错而且运行时间和报错都一样,于是看了一下调用此方法的地方,调用getPartNum(36,100000000)返回-15,啊啊啊为什么?
仔细一想原来是基本类型最大值继续增加就是负数了,2^31-1的值是 2147483647,而cols*rows为3600000000,自然而然乘积就变成了负值,后面的乘积也就是负值了所以自然也就是
解决办法:把rows的类型改为long类型就可以了