我剛剛遇到一些令我感到困惑的代碼;我想澄清兩種變化。Java中傳遞的最終變量是否保留在另一端?
例1:
public String getFilepath(){
final File file = new File(this.folder, this.filename);
return file.getAbsolutePath();
}
什麼是宣佈file
「final
」 的目的是什麼?由於Java原語是通過值傳遞的,並且getAbsolutePath()
剛剛返回String
,所以在另一側(調用方法)該變量不會是final
,是不是?而且由於file
變量只存在於這兩行的範圍內,所以我無法真正看到final
關鍵字的任何用途。有什麼我失蹤?任何人都看到了這樣做的理由?
例2:
public String getFilepath(){
final File file = new File(this.folder, this.filename);
return file;
}
由於這裏正在返回的實際對象......這是不是意味着file
變量是不變/ final
另一邊......?這似乎沒有道理。
一般來說,在我看來,你通過一個變量,沒有它的訪問類型。在中,我可以在函數中使用private
變量,使用返回它的public
get函數 - 但通過調用函數接收它的變量必須指定訪問修飾符。因此,如果它指定了public
,那麼返回的變量將在該範圍內爲public
。如果它指定private
,則返回的變量將在該範圍內爲private
。與final
有什麼不同?是一個可以傳遞的變量的「恆定性」嗎?考慮到我對Java的瞭解,這讓我覺得不太可能。
或者我完全錯過了這一點,在上面的代碼中有final
關鍵字的其他目的?
編輯:
我籤回來誰寫的代碼,原來的開發商,他說他只是把final
關鍵字,因爲他原本以爲的方法將是一個很長時間,並希望確保該文件始終保持不變。他還表示,他通常會聲明一些不應該被改爲final
的變量,作爲一個普遍的原則,並且遵循原則 - 這兩點都提到了下面的答案。所以看起來我讀了太多關於標準原因的簡單的額外關鍵字。感謝大家!
有些情況下,使用最終肯定會給你更好的表現,例如使用http://en.wikipedia.org/wiki/Memoization。 – Stuart 2010-02-19 15:21:53
@Stuart,你很困惑。 Memoization優化與'final'關鍵字無關(儘管它們可以在Java中結合使用,'final'關鍵字不提供任何Memoization模式的固有速度優勢)。 – BrainSlugs83 2014-10-05 05:11:01
OP的問題從未得到解答。一個p̶a̶s̶s̶e̶d̶返回Java最終變量保持最終的另一端? – 2017-05-19 21:20:56