任何人都可以解释这个"死代码"的例子吗?

Ste*_*ett 0 java eclipse android if-statement dead-code

关于以下片段的一些解释:
我正在搞乱一些蓝牙发现电话.为此,我正在使用回调,如果BluetoothDevice找到a,将调用该回调.如果未找到设备,则参数为null:

@Override
public void provideDevice(BluetoothDevice device) {
    super.provideDevice(device);
    Log.v("MainActivity","device name = " +device.getName());
    if(device != null) {

        mBinder.start(device);

    } else { 

        Toast.makeText(this, "No Device found", Toast.LENGTH_SHORT).show();

    }
}
Run Code Online (Sandbox Code Playgroud)

Eclipse告诉我else块是死代码.

如果我Log在if-block中移动调用,则警告消失:

@Override
public void provideDevice(BluetoothDevice device) {
    super.provideDevice(device);

    if(device != null) {

        Log.v("MainActivity","device name = " +device.getName());
        mBinder.start(bc);

    } else { 

        Toast.makeText(this, "No Device found", Toast.LENGTH_SHORT).show();

    }
}
Run Code Online (Sandbox Code Playgroud)

我知道如果参数为null,第一个片段将抛出NPE.这不是本例中的问题.

我想知道为什么会dead code warning出现.

我可以提供完整的代码,如果这还不足以告诉我发生了什么.

Dav*_*ton 5

device在日志语句中取消引用.

如果你超过了那行代码,device 就不能为null,因为如果有的话,你会得到一个NPE.

这意味着该else语句是多余的,因为如果代码到达那么远,它就不可能null.