这个bug够隐蔽的。




















错误就在:
int mid = (low + high) / 2;
这行的问题是当low和high的和超过2^31-1, 也就是Java里最大整数值时,整数溢出就发生了,而mid就变成负数了, 于是JVM就抓狂了,于是ArrayIndexOutOfBoundsException就发生了。
解决方法是把它改成:int mid = low + ((high - low) / 2);
这个bug够隐蔽的。
错误就在:
int mid = (low + high) / 2;
这行的问题是当low和high的和超过2^31-1, 也就是Java里最大整数值时,整数溢出就发生了,而mid就变成负数了, 于是JVM就抓狂了,于是ArrayIndexOutOfBoundsException就发生了。
解决方法是把它改成:int mid = low + ((high - low) / 2);