访问对象属性要比访问本地变量慢得多。你不应该这样写你的代码:
for (int i = 0; i < this.mCount; i++) dumpItem(this.mItems[i]);
而是应该这样写:
int count = this.mCount; Item[] items = this.mItems; for (int i = 0; i < count; i++) dumpItems(items[i]);
(我们直接使用“this”表明这些是它的成员变量)
一个相似的原则就是:决不在一个For语句中第二次调用一个类的方法。例如,下面的代码就会一次又一次地执行getCount()方法,这是一个极大地浪费相比你把它直接隐藏到一个Int变量中。
for (int i = 0; i < this.getCount(); i++) dumpItems(this.getItem(i));
这是一个比较好的办法,当你不止一次的调用某个实例时,直接本地化这个实例,把这个实例中的某些值赋给一个本地变量。例如:
protected void drawHorizontalScrollBar(Canvas canvas, int width, int height) { if (isHorizontalScrollBarEnabled()) { int size = mScrollBar.getSize(false); if (size <= 0) { size = mScrollBarSize; } mScrollBar.setBounds(0, height - size, width, height); mScrollBar.setParams( computeHorizontalScrollRange(), computeHorizontalScrollOffset(), computeHorizontalScrollExtent(), false); mScrollBar.draw(canvas); } }
这里有四次mScrollBar
的属性调用,把mScrollBar
缓冲到一个堆栈变量之中,四次成员属性的调用就会变成四次堆栈的访问,这样就会提高效率。
附带说一下,对于方法同样也可以像本地变量一样具有相同的特点。