为什么方法参数重新分配给局部变量?
在查看Java API源代码时,我经常看到方法参数被重新分配给局部变量。 这为什么要这样做?
void foo(Object bar) { Object baz = bar; //... }
这是在java.util.HashMap中
public Collection values() { Collection vs = values; return (vs != null ? vs : (values = new Values())); }
这是线程安全/更好性能的规则。 HashMap
values
是不稳定的。 如果要将变量赋值给局部变量,它将成为本地堆栈变量,它自动是线程安全的。 而且,修改本地堆栈变量不会强制“发生在之前”,因此在使用它时不会产生同步损失(与每次读取/写入将花费您获取/释放锁定时的易失性相反)
我必须看一些真实的例子,但我能想到的唯一原因是如果需要保留原始值以便在方法结束时进行一些计算。 在这种情况下,声明其中一个“变量” final
将使这一点清楚。