2011-01-31 37 views
6

可達代碼,請看看這個Android的代碼示例:的Java/Android的代碼優化:請問Java的去除構建

private static final boolean aBoolean = false; 

... 

if(aBoolean){ 
    //do something like logs 
} 

在這種情況下,由於aBoolean的值是假的,它不能改變在運行時,//會執行類似logs語句的內容在構建時被忽略,還是仍然會構建,並且每次都會評估if?

我試圖找到像前處理#DEFINE #IF行爲......所以,當我編碼,我得到我的日誌,當我鬆開我切換一個值和我所有的調試代碼被完全忽略。

(也是我想指出的是,我的問題就是Android面向所以如果在這個問題上的Java和Android之間的差異,請讓我知道)

回答

3

檢查記錄是完全找到一個變量。即使代碼沒有得到優化,檢查一個布爾條件幾乎是沒有操作,並且你是過早地優化。

但回答你的問題,它可能會得到優化。

-2

如果該語句是不可到達這總是會給編譯時錯誤.....

如。如果你使用return statemnt b4任何代碼,這會給編譯時錯誤。

,但如果你使用這種類型的代碼

如果(aBoolean){// 做一些 }

它們不受用Java來避免或byjava不會刪除.......

+2

至少對於桌面Java來說,這是不對的,代碼將被JIT刪除。而且代碼不會產生編譯時錯誤。 –

+0

爲什麼-1在使用return之後嘗試放置任何語句而沒有任何條件。 這會給出錯誤「無法訪問的代碼語句」。 –

+0

具有已知-false條件的if子句從「不可達代碼」檢測中明確排除*,準確地說是允許這樣的事情(基於編譯時值的條件執行)。試試吧,你會看到的。 –