原来是这样:
public Object pop() {
if (size==0)
throw new EmptyStackException();
Object result = elements[--size];
elements[size] = null; // Eliminate obsolete reference
return result;
}
生成一个Object result是不是多余?
public Object pop() {
if (size==0)
throw new EmptyStackException();
elements[size] = null; // Eliminate obsolete reference
return elements[--size]; }
这样有什么不好的吗?
public Object pop() {
if (size==0)
throw new EmptyStackException();
Object result = elements[--size];
elements[size] = null; // Eliminate obsolete reference
return result;
}
生成一个Object result是不是多余?
public Object pop() {
if (size==0)
throw new EmptyStackException();
elements[size] = null; // Eliminate obsolete reference
return elements[--size]; }
这样有什么不好的吗?
result在栈内存中会分配空间。
在c++中上面的代码回执行一次拷贝构造函数,会有一个临时对象的产生,这是不必要的开销
而写成return elements[--size];省了result在栈中分配空间,这样效率更高
effective java 上这样写应该有他的道理吧
再求
不象c++
result是一个引用,elements[--size]返回的是一个地址,对吧。你要保存这个地址是不是要分配内存空间,而这个result引用就是分配在栈中的,你使用return elements[--size];是不是少了result引用,也就是说你在内存中不需要分配这个空间了,这样效率不是更高了吗