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

ini*_*ero 15 java

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

void foo(Object bar) {
  Object baz = bar;
  //...
}
Run Code Online (Sandbox Code Playgroud)

这是在java.util.HashMap中

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

Pet*_*iuk 8

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