原来是这样:  
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];    }
这样有什么不好的吗?

解决方案 »

  1.   

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

  2.   

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

  3.   

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

  4.   

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

  5.   

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