最佳答案
我正在阅读Java的ArrayList
源代码,并注意到if语句中有一些比较。
在Java 7中,grow(int)
使用的方法
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
在Java 6中,grow
不存在。ensureCapacity(int)
使用的方法
if (newCapacity < minCapacity)
newCapacity = minCapacity;
这一变化背后的原因是什么?是性能问题还是风格问题?
我可以想象,与0比较会更快,但仅仅为了检查它是否为负而执行一个完整的减法,对我来说似乎有点过头了。同样在字节码方面,这将涉及两个指令(ISUB
和IF_ICMPGE
),而不是一个指令(IFGE
)。