2015-09-25 30 views
1

是每次訪問它時計算的該字段的值還是在1.73 ...開始時被替換?如何以及何時計算靜態最終字段值?

private static final double SQRT_3 = Math.sqrt(3); 

我認爲不是,但有沒有什麼好處直接把價值?我看到在某人代碼中

+1

這不是一個常量變量,因此它不會被編譯代碼中所有訪問點的常量1.73替代。 –

+0

一個編譯器可能會做優化。 – ZhongYu

+0

那麼做到這一點的「正確」方式是什麼? – Spooky

回答

3

在您的發佈代碼中,SQRT_3字段將在加載類時調用Math.sqrt(3)進行初始化。之後,當您訪問該字段時,將獲得第一次調用返回的值,並且Math.sqrt不會再被調用。

直接添加該值而不是使用Math.sqrt計算該值的好處是該值將是一個可由編譯器內聯的常量表達式。不過,這是一個真正的微觀優化。衡量瓶頸在哪裏,並解決這些問題,不要爲小東西出汗。

相關問題