2014-05-19 16 views
0

這裏是節目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中,字符串是不可變的。所以如果我們重新分配字符串,不應該引用改變?

+1

您是否嘗試重新分配它以查看會發生什麼?你的工程精神在哪裏? –

+1

你是什麼意思「不應該引用改變」?不應該*哪些*引用改變?我懷疑你對String的不變性感到困惑。 –

回答

0

不,因爲您打印的是Closure對象的引用,而不是String

相關問題