gpt4 book ai didi

java - 这是局部变量还是静态变量捕获?

转载 作者:行者123 更新时间:2023-12-02 09:46:06 26 4
gpt4 key购买 nike

在以下代码中,lambda 表达式捕获一个 static 变量。但是,对于封闭类的范围来说,它也是本地的,那么这是本地变量捕获还是静态变量捕获?

public class ExampleImpl{
static String someStaticVar = "text";
Example lam = () -> {
System.out.println(someStaticVar);
};


interface Example {
void sample();
}
}

最佳答案

术语“局部变量捕获”和“静态变量捕获”没有出现在规范中的任何地方,因此它们的含义取决于创造这些术语的人。

最可能的解释是“局部变量捕获”仅意味着“捕获局部变量”,同样,“静态变量捕获”意味着“捕获静态变量”,换句话说,捕获碰巧发生的变量可以是本地、实例字段或静态字段,然后,答案非常简单,当您将 lambda 表达式放置在不同的作用域中时,变量的性质不会改变。

在您的示例中,someStaticVar 始终是一个static 变量,无论您在何处访问它。

尚不清楚为什么这种区别对您很重要。幕后可能存在技术差异,这些差异是故意未指定的,因此是特定于实现的。捕获变量的类型最相关的方面是捕获实例变量将导致生成的实例保留对该实例的引用。但首先,这不适用于局部变量或静态变量,其次,这是一种自然关系,潜在访问实例字段的代码可能会阻止该实例的垃圾回收。

关于java - 这是局部变量还是静态变量捕获?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56640205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com