gpt4 book ai didi

java - 方法参数中的final关键字不改变

转载 作者:行者123 更新时间:2023-12-02 01:31:00 26 4
gpt4 key购买 nike

我有一些关于 final 的问题。代码如下

public class Demo {
private static Thread thread;
public static void main(String[] args) {
for (int i = 0; i < 4; i++) {
fun("url-" + i);
}
}
public static void fun(final String url) {
if (thread == null) {
thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(url);
}
});
}
thread.run();
}
}

输出:

url-0
url-0
url-0
url-0
为什么?我认为它看起来像这样

url-1
url-1
url-3
url-4

最佳答案

您只需定义一次Thread 对象。这是唯一一个与 fun 方法的后续调用一起使用的实例。 这与urlfinal这一事实无关

如果将方法实现更改为类似以下内容(使 thread 成为局部范围的变量),您将看到获得预期的输出:

public static void fun(String url) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(url);
}
});
thread.run();
}

换句话说,当您创建 Thread 对象时,它会记住传递给它的 url 值。由于当 url 参数采用不同的值时,您没有创建其他 Thread 对象,因此您只能看到传递的 url 值创建对象的时间,这解释了为什么您每次都会看到 url-0

关于java - 方法参数中的final关键字不改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56075980/

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