gpt4 book ai didi

java - 为什么传递给 runnable 的变量需要是最终的?

转载 作者:搜寻专家 更新时间:2023-10-30 21:19:32 26 4
gpt4 key购买 nike

如果我有一个变量 int x = 1,比如说,我在主线程中声明了一个 runnable,并且我想将 x 传递给 runnable 的 run() 方法,它必须声明为 final。为什么?

final int x = 0;//<----must be final...
private class myRun implements Runnable {

@Override
public void run() {
x++;//
}

}

最佳答案

因为语言规范就是这么说的。 According to Guy Steele ,此选择背后的基本原理是程序员希望方法中的声明 int x = 0 导致堆栈分配存储,但如果您可以返回 new myRun() 从方法(或以其他方式让 myRun 持续超过函数的返回)并且你可以在之后修改它,然后 x 必须堆分配而不是让您期望的语义。

他们本可以这样做,事实上其他语言也这样做了。但是 Java 设计者决定改为要求您将 x 标记为 final 以避免要求实现堆分配看起来像堆栈分配存储的东西。

(我应该注意:这不是特定于Runnable。它适用于任何匿名内部类。)

关于java - 为什么传递给 runnable 的变量需要是最终的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11424753/

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