2013-12-10 26 views

回答

1

java中的數組是參考類型。當你聲明一個數組final時,你聲明的是數組對象引用本身final,而不是數組包含的元素。所以雖然你不能改變數組引用,但你仍然可以改變數組中的單個元素。

爲了得到你想要的效果,你必須使用Collections.unmodifiableList或類似的東西。

2

因爲最終適用於數組引用,而不是內容。

您可以修改數組內容,但不能說,重新實例化數組。

0

數組支持,但對其他任何引用變量來說都沒有什麼不同:您可以更改變量的狀態,但不能更改該變量引用的對象,此處爲數組對象。對於數組,狀態是項目引用。

0
final int[] test = new int[3]; 
test = new int[2]; //Error here 

(最終適用於引用,而不是對象數據)

1

考慮這些

final int a[]={11,2}; 
    int b[]={}; 
    a=b;// this will compile wrong 
    a[1]=1;//this will compile fine 

因爲,如果你正在聲明最終陣列那麼就意味着在陣列參考不能被改變,但你可以明顯改變內容

0

如果你需要一個不可變的數據結構,List(如果需要,你可以使用ArrayList)是你想去的地方。如果你真的需要它是一個數組,你只需要用getter方法創建你自己的數據結構。

+0

ArrayList是一個「不可變數據結構」嗎? –

+0

@HovercraftFullOfEels:你可以重寫'ArrayList'的推杆方法來執行「不變性」。是的,這有點哈克,我會用一個'Collection'。 – AaronB

+1

Collections.unmodifiableList生成指定列表的不可修改視圖。 –

0

Java中的final影響變量,它與您指定給它的對象無關。

final String[] myArray = { "hi", "there" }; 
myArray = anotherArray; // Error, you can't do that. myArray is final 
myArray[0] = "over"; // perfectly fine, final has nothing to do with it 
相關問題