站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题effective java item5的pop可不可以这样?

effective java item5的pop可不可以这样?

摘要: effective java item5的pop可不可以这样?


原来是这样:
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];

}
这样有什么不好的吗?



Object result = elements[--size];
result在栈内存中会分配空间。
在c++中上面的代码回执行一次拷贝构造函数,会有一个临时对象的产生,这是不必要的开销
而写成return elements[--size];省了result在栈中分配空间,这样效率更高



可这是java啊。不是在栈上,还是在堆上。
effective java 上这样写应该有他的道理吧
再求


result只是一个引用而已,并没有新生成对象吧
不象c++


Object result = elements[--size];
result是一个引用,elements[--size]返回的是一个地址,对吧。你要保存这个地址是不是要分配内存空间,而这个result引用就是分配在栈中的,你使用return elements[--size];是不是少了result引用,也就是说你在内存中不需要分配这个空间了,这样效率不是更高了吗




还是没有说明effictive java的作者为什么要多生成一个result引用。


↑返回目录
前一篇: java写文件的换行问题
后一篇: jdk1.5找不到javax.servlet.http,javax.servlet.http的问题