当前位置: 首页 > 面试题库 >

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

慕震博
2023-03-14
问题内容

浏览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())); 
}

问题答案:

这是线程安全性/更好性能的规则。valuesHashMap易失。如果将变量分配给局部变量,它将变为局部堆栈变量,该变量自动是线程安全的。而且,修改局部堆栈变量不会强制“先发生”,因此在使用它时不会产生同步损失(与之不同的是,每次读/写操作都会导致易失性,这会花费您获取/释放锁的时间)



 类似资料:
  • 问题内容: 作为Eclipse的长期用户,我正在与IntelliJ IDEA 10一起玩耍。我似乎找不到如何执行“向新局部变量分配语句”代码完成的工作。 功能说明: 我输入类似 然后按+ 并输入,Eclipse将行更改为: 同时,我可以立即键入“ bufferedOutputStream”以将其重命名(或从下拉菜单中选择“ bufferedOutputStream”,“ outputStream”

  • 问题内容: 我一直在使用IIFE中和,并一直在使用的结构如下: 方法1: 但是,我经常看到以下情况,其中将变量分配给 方法2: 注意: 此问题 不是 关于此模式是什么或IIFE是什么。这与为什么要 在IIFE上 使用返回变量及其与Angular实践的关系有关。 在Angular方法1中工作正常,但是在我看到的许多原始JS示例中,都使用了方法2。我的假设是,封装在其中的任何内容都可以通过它进行调用。

  • 问题内容: 我想在一个类中构建一个方法,并从该类中获取默认值参数。通常,我会对某些数据进行过滤。在我的班级内部,我有一个方法,通常我会传递数据向量。有时我没有矢量,而是获取了模拟数据。每次我不传递特定向量时,我都希望默认情况下获取模拟数据。我认为在我说的方法定义中应该很容易构造。但是由于某种原因,我有一个错误。简化的结构是: 我期望的输出应该是: 我尝试了默认分配,因为它显然无法正常工作。据我了解

  • 问题内容: 这是JDK的类方法。作者为什么将字段分配给局部变量? 上面和下面之间有什么区别?这与线程安全有关吗? 问题答案: 为了稍微扩展一下Michael的答案,我希望它可以确保该方法永不返回,而且还可以提供所提到的性能优势。 给出以下代码: 至少从理论上讲,在多线程代码中,可以将字段设置为第一次读取()和第二次读取之间,然后将其返回。我没有看过其余的代码,但是我假设还有其他可能被分配的地方。对

  • 我试图在kotlin中编写一个函数,但我无法将值重新分配给函数参数,它说val不能重新分配。 当我试图分配一个值url=主页. it给我错误val不能重新分配,我是新的kotlin,我不明白是什么问题,很少帮助将不胜感激。

  • 问题内容: public class ReturnTest { public static void main(String[] args) { ReturnTest rt = new ReturnTest(); rt.show(); } 在上面的代码中,该show()方法返回一个String未被 任何变量捕获的值。编译器和JVM均不会引发任何警告, 错误或异常。对于原始返回类型也是如此。 为什么