2016-09-29 70 views
1

據我所知,public/protected/private關鍵字對創建時間沒有影響。但我想知道保持一個公共對象/類可訪問應該有成本。它是否有成本?'public/protected/private`關鍵字對性能有任何影響嗎?

+0

看看http://stackoverflow.com/questions/7365329/speed-optimizing-private-and-public-variables-java,http://stackoverflow.com/questions/26676200/how-does-access-modifier -impact-the-performance-in-java,http://stackoverflow.com/questions/4279420/does-use-of-final-keyword-in-java-improve-the-performance – Andrew

+0

這是一個[示例]( http://stackoverflow.com/a/23281131/3448419)訪問修飾符如何影響運行時性能。 – apangin

回答

6

不,他們沒有。它們本質上是編譯時構造。

也就是說,一些OOP語言(例如C++)可以根據private來做出優化決定。但是由於反映,這不太可能在Java中被利用,因爲在Java中,private不是保證它對類以外的東西的隱形性。

3

保持公共對象/類可訪問應該有成本。

是的,編譯器需要檢查你正在訪問的東西是私有的,受保護的和公共的。然後決定你是否被允許訪問它。

但是在運行時,運行時不需要檢查是否允許您訪問變量。爲什麼?因爲要運行一個程序,它必須被編譯(除非你使用像JS這樣的解釋語言)。如果你試圖訪問你不允許的變量,它甚至不會運行!

所以在運行時,運行時不需要擔心是否可以訪問變量,因此對性能沒有影響。

+1

這個答案不完整。在類加載時(在運行時),字節碼驗證程序會檢查您是否沒有訪問私有的,受保護的或包私有的方法,以及沒有此權限的代碼中的字段和類。此檢查需要一些(最小)時間,但只需加載一次。 –

+0

然後它有成本。 – ahmetozkok

+1

我認爲你應該寫這個答案。 – ahmetozkok