在java中创建或重用对象引用的区别

在java中创建或重用对象引用的区别,java,Java,很抱歉,我想不出比这个问题更好的题目了。你能帮我理解这两种情况的区别吗 public class Temp { int value; public Temp(int i) { this.value = i; } public void method(Vector<Temp> vec) { Temp temp=null; // first case, creating new object but reusing the reference for

很抱歉,我想不出比这个问题更好的题目了。你能帮我理解这两种情况的区别吗

public class Temp {
int value;

public Temp(int i) {
    this.value = i;
}

public void method(Vector<Temp> vec) {
    Temp temp=null;

    // first case, creating new object but reusing the reference
    for (int i = 0; i < 10; i++) {
        temp = new Temp(i);
        vec.add(temp);
    }

    // second case, object and reference are new
    for (int i = 0; i < 10; i++) {
        Temp temp1 = new Temp(i);
        vec.add(temp1);
    }

}
}
公共类临时{
int值;
公共临时工(内部一){
该值=i;
}
公共无效法(向量向量向量){
温度=零;
//第一种情况,创建新对象但重用引用
对于(int i=0;i<10;i++){
温度=新温度(i);
向量添加(温度);
}
//第二种情况,对象和引用是新的
对于(int i=0;i<10;i++){
温度temp1=新温度(i);
向量添加(temp1);
}
}
}

哪种实现应该是最佳实践。

您应该尝试将变量保持在其最窄的范围内。在这种情况下,第二种情况似乎比第1种情况好。案例1的唯一好处是,如果您真的需要知道添加到
向量的最后一个元素是哪个(在本例中,这似乎很奇怪)。

我更喜欢第二个选项,而不是第一个选项,以确保它总是在声明时初始化

您不能在第一个选项中将
temp
声明为
final


注意:不要使局部变量未初始化。它应该是
Temp=null在第一个选项中。

您还可以直接创建和添加:
vec.add(新临时工(i))我更喜欢哪个。但是,如果这取决于你的公司政策,或者,如果这只是为了你,取决于你的偏好。重用对象是有道理的,但我从来没有见过重用变量更有效的时候(也许从微观角度来看,但不明显)@antoh,我不能使用它,因为在创建对象后,我使用setter方法设置了太多参数。由于编译器优化,这三种可能性会导致相同的结果吗?@JulienBreuil我只看到两种可能性,它们产生了几乎相同的字节码。谢谢你的宝贵意见。@LuiggieMendoza案例1和案例2在性能方面会有什么不同吗?@jbaille1991不,这些案例中的任何一个都没有性能改进。意识到这是一个旧线程,但不想开始重复。有人(@LuiggiMendoza?)能提供事实来支持答案吗?我想知道和OP一样的事。@AfterWorkGuinness你在找什么?为什么使用后者比前者更好的一个例子?Temp;如果下一个语句将为temp赋值,则有意义。如果在下一个语句中只有一个分支将赋值,那么这是错误的(编译器会抱怨),如果这是预期的,那么temp必须是null@SilviuBurcea对不起,我没有。你想说什么?我不同意你的意见:)