2014-09-24 56 views
0

我很困惑。我試着用最終字符串[]和最終字符串

final String usr; 

,並試圖改變它從來沒有工作過的值,但是當我使用的陣列final String[] usr = {"", ""};,它的工作。我甚至從這個

sgnup.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent e){ 
     user[0] = sUsr.getText(); 
     } 
}); 

訪問它,我覺得很困惑,因爲我的final的理解是,與final聲明的變量和值添加到它,值不會改變。但爲什麼數組final工作?我甚至可以將文本設置爲其中一個數組。

+0

http://stackoverflow.com/questions/15655012/how-final-keyword-works – 2014-09-24 13:58:54

+0

數組在Java中永遠不可變。 – Tom 2014-09-24 13:59:00

+0

我想你的問題在這裏回答:http://stackoverflow.com/questions/10339930/final-array-in-java – Eypros 2014-09-24 14:02:12

回答

1

是的,因爲您不更改usr的引用,但它包含的內容。 final阻止您執行諸如usr = new String[5];之類的操作(將usr更改爲另一個陣列),但可以更改該陣列的內容而不會出現任何問題。

final String[] a = new String[5]; 
a = new String[3]; // illegal 

final String[] a = new String[5]; 
a[0] = "Hello"; // legal, i don't change a but what is inside a[0] 
0

在Java中,任何類型的對象(包括任何陣列)的一個變量實際上是一個參考到一個對象,而不是對象本身。當你聲明變量爲final時,這意味着引用不會改變,這意味着它引用的對象將始終是同一個對象。但是,如果對象的內部狀態仍然可以在沒有修改器的情況下更改,則添加final不會阻止引用對象的內部狀態發生更改。特別是對於final數組,數組引用本身不能被重新分配,但數組元素仍然可以更改。

在這種情況下,您可以通過簡單地從String變量中刪除final修飾符來避免使用數組。