if (myCondition1 && myCondition2 && myCondition3)
{
...
}
我寫了這段代碼併成功運行。但是我警告了一部分(...)。警告是「死碼」。這對我來說很有意思。你有什麼想法嗎? 謝謝你爲什麼我會收到警告「死碼」?
if (myCondition1 && myCondition2 && myCondition3)
{
...
}
我寫了這段代碼併成功運行。但是我警告了一部分(...)。警告是「死碼」。這對我來說很有意思。你有什麼想法嗎? 謝謝你爲什麼我會收到警告「死碼」?
「死代碼」是永遠不會執行的代碼。很可能您的某個條件在某處硬編碼爲false
,因此if
中的條件始終爲false。
死代碼意味着它永遠不會執行。例如。
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
}
塊中的代碼永遠不會到達。原因很可能是其中一個條件總是錯誤的。
如果myCondition1,myCondition2和myCondition3中的一個或多個始終爲false(如private const bool myCondition1 = false;)那麼if中的代碼將永遠不會執行。
這可能會出於多種原因。無論是整個if
塊是死,造成類似如下:
boolean condition1 = true;
boolean condition 2 = !condition1;
if(condition1 && condition2) {
//This code is all dead
Foo f = fooFactory();
f.barr(new Bazz());
}
或者你使用類似return
,break
或continue
無條件離開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 :(");
}
}
你確定你已經很好地進入標記爲「死亡」的代碼部分嗎? – elyashiv 2012-08-14 12:25:48
我們需要更多(真實)代碼來查看爲什麼會彈出警告。通常你有類似'System.exit(0); System.out.println('blab');',第二個命令在執行時永遠不可訪問。 – Sirko 2012-08-14 12:26:03
假設你有myCondition1 = true和myCondition2 =!myCondition1。 – brano 2012-08-14 12:26:41