【发布时间】:2014-03-08 09:42:44
【问题描述】:
所以,java 框架中的pop()method java.util.Stack 类看起来像这样:
@SuppressWarnings("unchecked")
public synchronized E pop() {
if (elementCount == 0) {
throw new EmptyStackException();
}
final int index = --elementCount;
final E obj = (E) elementData[index];
elementData[index] = null;
modCount++;
return obj;
}
我难以理解的部分是局部变量index。看来我们不需要了。 elementCount 是 Vector 类中的一个实例变量,是 Stack 类扩展的。
所以我的意思是,
final int index = --elementCount;
final E obj = (E) elementData[index];
elementData[index] = null;
这3行代码可以这样写
final E obj = (E) elementData[--elementCount];
elementData[elementCount] = null;
消耗更少的内存,因为index 局部变量的内存空间没有被使用。
另外,我在 java 框架源代码中发现了这种模式。例如java.util.ArrayList 类中的add(E Object) 方法看起来:
@Override public boolean add(E object) {
Object[] a = array;
int s = size;
if (s == a.length) {
Object[] newArray = new Object[s +
(s < (MIN_CAPACITY_INCREMENT / 2) ?
MIN_CAPACITY_INCREMENT : s >> 1)];
System.arraycopy(a, 0, newArray, 0, s);
array = a = newArray;
}
a[s] = object;
size = s + 1;
modCount++;
return true;
}
在本例中,array 是一个实例变量,如您所见,分配了一个新的局部变量 a 来保存它。
有人知道吗?非常感谢提前。 :)
【问题讨论】:
标签: java variables frameworks instance local