Java 不同地方的死代码

Java dead code in different places

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

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
}

奇怪的是,当我将 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
}

有谁知道哪里出了问题吗?

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

if(key.equals(element.getK()))

如果当时是 null,那么您会得到一个 NullPointerException,但您没有听清。这意味着该方法不会继续到您的 if(element == null) 语句。

如果 element 不是 null,那么你的 if 语句的主体也不会被执行。