2013-03-10 81 views
2
class hello { 
    public static void main(String arg[]){ 

    int[] c = { 2 }; 
    final int[] d = { 3 }; 

    } 

static void useArgs(final int a, int b, final int[] c, int[] d) { 

    c[0]=d[0]; // no error 
    c = d; //error 
    } 
} 

夥計們有人可以解釋這種行爲嗎?方法聲明中的參數聲明之前的最後一個關鍵字

+0

http://stackoverflow.com/questions/5380177/final-arguments-in-interface-methods-whats-the-point – BobTheBuilder 2013-03-10 06:42:40

+0

http://stackoverflow.com/questions/4930114/why-declare-a-function -argument-to-final- – BobTheBuilder 2013-03-10 06:43:10

回答

6

可變c是最終決定。這意味着您不能爲該變量分配另一個值。

但是數組中的元素本身並不是最終的,這就是爲什麼你能夠改變像c[0]=d[0]這樣的元素的賦值。

+0

是的,謝謝隊友:) – 2013-03-10 06:52:55

+0

請注意,數組(甚至原語數組)是Java中的對象。對象通過引用進行處理,如果應用'final'關鍵字,則僅對對象的引用是最終的,而不是對象的成員。 – 2013-03-10 09:01:52

3

c是一個int數組的最終(const)引用。並且由於c是最終的,所以你不能改變它的值(即改變它所指的地址)。這適用於任何聲明爲final的變量(不僅僅是數組)。

這也將無法正常工作:

final int c = 1; 
int d = 2; 
c = 2; // Error 
c = d; // Error 
+0

表示它不能更改c的**引用**值,但是可以更改該數組的值? – 2013-03-10 06:44:42

+0

c [0]!= c所以最後只適用於c本身,而不是它的元素 – giorashc 2013-03-10 06:48:19

+0

是啊感謝隊友..我明白了。 – 2013-03-10 06:50:37