gpt4 book ai didi

java - Java 中的闭包和不可变字符串。这个程序如何运作?

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

这是程序

public class Closure {

public String foo = "";

public static Closure process(final Closure t) {
System.out.println(t.toString() + " = " + t.foo);
t.foo = "bar";
new Runnable() {
public void run() {
System.out.println(t.toString() + " = " + t.foo);
t.foo = "baz";
}
}.run();
System.out.println(t.toString() + " = " + t.foo);
return t;
}

public static void main(String[] args) {
process(new Closure());
}

}

当我执行它时,所有 3 个打印都显示变量 t.foo 的相同引用。这对于闭包来说是有意义的,正如我们所期望的那样。

令我困惑的是,Java 中的字符串是不可变的。那么如果我们重新分配字符串,引用不应该改变吗?

最佳答案

当问题不包含任何闭包时,使用Closure 会有点令人困惑。

程序的输出应该如下所示(Ideone 想要一个具有此名称的类而不是 Closure)

Ideone@1e61582 = 
Ideone@1e61582 = bar
Ideone@1e61582 = baz

参见http://ideone.com/c5HzEF

正如您所看到的,引用 foo 正在发生变化。您打印的引用 t 不会按预期更改。

关于java - Java 中的闭包和不可变字符串。这个程序如何运作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23737927/

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