2011-02-12 21 views

回答

7

不,我不認爲這是一個錯誤。它取決於DEBUG值的設置LOG_ENABLED要麼LOGDLOGV

相關位是:

public class RenderScript { 
    static final String LOG_TAG = "libRS_jni"; 
    private static final boolean DEBUG = false; 
    @SuppressWarnings({"UnusedDeclaration", "deprecation"}) 
    private static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV; 

和最後一行是概念等同於:

private static final boolean LOG_ENABLED; 
    if (DEBUG) 
     LOG_ENABLED = Config.LOGD; 
    else 
     LOG_ENABLED = Config.LOGV; 

事實上,

private static final boolean LOG_ENABLED == DEBUG ? Config.LOGD : Config.LOGV; 

實際上並沒有什麼意義因爲這意味着:

private static final boolean ((LOG_ENABLED == DEBUG) 
           ? Config.LOGD 
           : Config.LOGV); 

它根本沒有聲明變量名,只是一個應該分配給某個值的值。

1

這混亂的關於在Java中如何ternary operators工作只是一個簡單的位。你正在做的事情,如:

int i; 
boolean b; 
int n1=2; 
int n2=3; 

i = b ? n1 : n2; 

其中B可爲真或假的表達式。我曾經在第一個元素周圍使用圓括號來表示這一點,儘管我只是翻閱了一些代碼,而現在我似乎已經停止了這樣做!

+0

它不只是在Java中。大多數語言對於三元運算符都有相同的語法。參考:http://en.wikipedia.org/wiki/%3F: – codetwiddler 2012-10-15 14:36:29