BAT面试必问:a-b<0与a<b什么区别?overflow-conscious代码什么玩意?
读过JDK源码的同学,尤其是读过Collection框架的同学,肯定遇到过下面这种代码:
第一次读到这样的代码,你可能跟我一样感到困惑,为什么不直接写成 “newCapacity < minCapacity”,而是更麻烦的"newCapacity – minCapacity < 0"呢?
不过,当看到那个注释"overflow-conscious code"之后,你或许明白了一点点,这是为了解决数值溢出问题。
那么"newCapacity < minCapacity"中究竟有什么样的溢出问题?"newCapacity – minCapacity < 0"是怎么解决"newCapacity < minCapacity"中的溢出问题的?究竟是newCapacity和minCapacity中的哪个变量溢出?还是两个变量都溢出?对于这些问题,你都能给出清晰的回答吗?如果不能,欢迎继续阅读!
本文以下面这段代码为例,帮助大家彻底弄明白a<b与a-b<0有何区别