這裏是節目Java和不可變字符串中的閉包。這個程序如何工作?
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中,字符串是不可變的。所以如果我們重新分配字符串,不應該引用改變?
您是否嘗試重新分配它以查看會發生什麼?你的工程精神在哪裏? –
你是什麼意思「不應該引用改變」?不應該*哪些*引用改變?我懷疑你對String的不變性感到困惑。 –