Java死代码在不同的地方

Pri*_*Luo 0 java dead-code

对不起,如果我问一个愚蠢的问题,很久没有用Java练习......我写了一些代码来模拟哈希表.这是我的代码的一个功能:

protected int find(K key){
    int avail=-1;
    int i=hashValue(key);
    int j=i;
    do{
        Entry<K, V> element = bucket[i];

        if(element==null){
            if(avail<0){
                avail=i;
            }
            break;
        }

        if(key.equals(element.getK())){
            return i; // found
        }

        if(element==this.used){
            if(avail<0){
                avail=i;
            }
        }
        i=(i+1)%capa;
    }while(i!=j);
    return -(avail+1); // return a hash address
}
Run Code Online (Sandbox Code Playgroud)

奇怪的是,当我将if语句if(element == null)改回一点(除了结构的最开头)时,它会警告我这是一个死代码:

protected int find(K key){
    int avail=-1;
    int i=hashValue(key);
    int j=i;
    do{
        Entry<K, V> element = bucket[i];

        if(key.equals(element.getK())){
            return i; // found
        }

        if(element==this.used){
            if(avail<0){
                avail=i;
            }
        }

        // dead code then
        if(element==null){
            if(avail<0){
                avail=i;
            }
            break;
        }
        //dead code then

        i=(i+1)%capa;
    }while(i!=j);
    return -(avail+1); // return a hash address
}
Run Code Online (Sandbox Code Playgroud)

谁知道哪个部分出了问题?

Erw*_*idt 8

在你的第二个代码示例中,element不可能是null因为你已经在上面的行中引用它:element.getK()in line

if(key.equals(element.getK()))
Run Code Online (Sandbox Code Playgroud)

如果是null在那时,那么你会得到一个NullPointerException你没有抓住的东西.这意味着该方法不会继续你的if(element == null)陈述.

如果element没有 null,那么你的身体if语句就不会被自动执行.