Java死代码在不同的地方

标签 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
}

奇怪的是,当我将 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() 一致

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

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

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

关于Java死代码在不同的地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42102922/

相关文章:

java - Android setOnClickListener 一键触发两次

java - Java 和 NodeJS 在后端如何通信?

java - 死代码 android setMultiChoiceItems

java - else if 中明显的错误条件,没有给出内部 body 的死代码

java - 为什么我会收到警告 "dead code"?

qt - 如何识别 QML 中未使用的代码和文件

java - 为什么显式 boolean 测试会出现死代码警告,而隐式 boolean 测试不会出现死代码警告

java - 如何配置 Tomcat 在调用 HttpServletResponse.encodeURL() 时不将 session ID 编码到 URL 中

java - 使用struts2 mvc架构如何将Canvas图像存储到服务器

java - Hibernate删除user和user_type而不是只删除user