2012-08-14 111 views
2
if (myCondition1 && myCondition2 && myCondition3) 
    { 
    ... 
    } 

我寫了這段代碼併成功運行。但是我警告了一部分(...)。警告是「死碼」。這對我來說很有意思。你有什麼想法嗎? 謝謝你爲什麼我會收到警告「死碼」?

+1

你確定你已經很好地進入標記爲「死亡」的代碼部分嗎? – elyashiv 2012-08-14 12:25:48

+2

我們需要更多(真實)代碼來查看爲什麼會彈出警告。通常你有類似'System.exit(0); System.out.println('blab');',第二個命令在執行時永遠不可訪問。 – Sirko 2012-08-14 12:26:03

+1

假設你有myCondition1 = true和myCondition2 =!myCondition1。 – brano 2012-08-14 12:26:41

回答

6

「死代碼」是永遠不會執行的代碼。很可能您的某個條件在某處硬編碼爲false,因此if中的條件始終爲false。

3

死代碼意味着它永遠不會執行。例如。

void someMethod() { 
    System.out.println("Some text"); 
    return; 
    System.out.println("Another Some text"); // this is dead code, because this will never be printed 
} 

同樣的情況下,你的條件檢查,例如,

String obj = ""; 
if(obj == null && obj.equals("")) { // here you get warning for Dead code because obj is not null and first condition is false so obj.equals("") will never evaluate 

} 
0

塊中的代碼永遠不會到達。原因很可能是其中一個條件總是錯誤的。

0

如果myCondition1,myCondition2和myCondition3中的一個或多個始終爲false(如private const bool myCondition1 = false;)那麼if中的代碼將永遠不會執行。

0

這可能會出於多種原因。無論是整個if塊是,造成類似如下:

boolean condition1 = true; 
boolean condition 2 = !condition1; 

if(condition1 && condition2) { 
    //This code is all dead 
    Foo f = fooFactory(); 
    f.barr(new Bazz()); 
} 

或者你使用類似returnbreakcontinue無條件離開if塊,如下圖所示:

for(Foo f : foos) { 
    if(true) { 
     f.barr(new Bazz()); 
     break; 
     //Everything after here is dead 
     System.out.println("O noes. I won't get printed :("); 
    } 
} 
相關問題