创建临时引用,vs重用?哪个更好?

时间:2015-01-04 00:51:05

标签: java performance object reference coding-style

假设我有一个多次调用的方法(比如每个应用程序运行10个adverage)。

我遍历一个列表,找到一个具有正确ID的元素,然后将该元素作为另一个方法的参数传递。

这个引用是否是每次使用new元素更新的类的字段(成员),或者我是否只是创建一个新的临时引用,这有什么区别吗?下面的代码示例

for (element e : list) {
    if (e.getID() == searchID) {
        //reassigning value of the reference in the class
        mElementToRemove = e;
        break;
        }
 }
 list.remove(mElementToRemove);

VS

 for (element e : list) {
    if (e.getID() == searchID) {
        //(new reference)
        Element mElementToRemove = e;
        break;
        }
 }
 list.remove(mElementToRemove);

或许没有区别哪个是更好的风格或哪个更高效?

谢谢!

*编辑。我输错了底部的例子。对于完整的上下文,我的意思是:

 private void removeThisId(int searchID) {
 Element ElementToRemove = e; 
 for (element e : list) {
    if (e.getID() == searchID) {
        //(new reference)
        mElementToRemove = e;
        break;
        }
 }
 list.remove(mElementToRemove);

}

2 个答案:

答案 0 :(得分:1)

在第二个例子中,Element将在循环结束时超出范围,因此甚至不会编译。

您是否考虑过使用Iterator

for(Iterator<Element> i = list.iterator(); i.hasNext(); ) {
     if(i.next().getId() == searchID) {
         i.remove();
     }
}

没有并发修改错误,不必声明临时变量。

如果您保证列表中最多只有一个searchID(为什么不使用Set呢?),那么您可以在删除后插入break;提前退出调用

答案 1 :(得分:0)

Premature optimization is the root of all evil - Donald Knuth

在您的情况下,上述意味着,除非您有令人信服的理由进行优化,否则请不要考虑优化。