为什么方法参数重新分配给局部变量?

时间:2010-08-30 15:53:11

标签: java

在查看Java API源代码时,我经常看到方法参数被重新分配给局部变量。为什么要这样做?

void foo(Object bar) {
  Object baz = bar;
  //...
}

这是在java.util.HashMap

public Collection<V> values() {
  Collection<V> vs = values; 
  return (vs != null ? vs : (values = new Values())); 
}

2 个答案:

答案 0 :(得分:8)

这是线程安全/更好性能的规则。 values中的HashMap是不稳定的。如果要将变量赋值给局部变量,它将成为本地堆栈变量,它自动是线程安全的。而且,修改本地堆栈变量不会强制“先发生”,因此在使用它时不会产生同步损失(相反,当每次读/写将花费您获取/释放锁时,易失性)

答案 1 :(得分:0)

我必须看一些真实的例子,但我能想到这样做的唯一原因是,如果在方法结束时需要保留原始值以进行某些计算。在这种情况下,声明其中一个“变量”final可以明确这一点。