什麼是這樣做的以下原因:在方法簽名中有最終輸入參數是什麼意思?
public void processSomething(final String hello, final String two, final Car car){}
,而不是:
public void processSomething(String hello, String two, Car car){}
什麼是這樣做的以下原因:在方法簽名中有最終輸入參數是什麼意思?
public void processSomething(final String hello, final String two, final Car car){}
,而不是:
public void processSomething(String hello, String two, Car car){}
這意味着,該方法中,你可以不分配新值的參數。
想要做到這一點的一個常見原因是能夠使用anonymous inner classes內的參數,其中只能引用局部變量,包括參數final
。
這樣做的另一個原因是如果您的編碼風格傾向於聲明所有局部變量作爲最終如果可能。 (我個人嘗試將視爲最終的,但是避免實際上以這種方式聲明它們,因爲它增加了粗體。)
這意味着您無法更改引用。字符串是不可變的,但是如果汽車是可變的,您可以更改該汽車中的字段,但不能將其更改爲另一輛汽車。
+1指出String是不可變的,但如果Car不是不可變的,那麼如果沒有最終的訪問修飾符,那麼裏面的字段可能會被更改! –
即使參考是最終的,您也可以更改字段。這與C++中的const不同。 –
這意味着該對象的引用無法在該方法內更改。
這意味着你不能改變引用,但它不能阻止對象被改變。
+1這樣做的原因。 –
讓我感到困惑的是:我認爲有時可能會改變最後的決賽。 IE,你聲明一個變量爲final,以便按鈕監聽器可以使用它。運行時,激活該按鈕偵聽器。然後更改變量。然後激活該按鈕偵聽器。第二次沒有不同的價值嗎?如果是這樣,爲什麼?如果不是......好吧,我想這真的是不可改變的,一旦你告訴我,我就不會感到困惑。 – ArtOfWarfare
@ArtOfWarfare:如果您已將變量聲明爲final,則您*無法*更改它。如果你認爲你可以,你應該寫一個單獨的問題來證明這一點。 –