Findbugs java 中可能的空指针取消引用

Findbugs Possible null pointer dereference in java

我正在使用 FindBugs 来检测代码中包含的错误。我找到了一些错误的解决方案,但是,我不明白为什么它仍然在检查 "micro" 行中显示 "Possible null pointer dereference" 错误。在 while 循环中,我已经表明我的输入应该不同于 null 值,但是,它仍然表明存在错误。如果可能的话,你能告诉我如何解决这个问题吗?提前致谢!代码如下:

import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.Charset;


public class FindBug {

    public static void main(String args[]) 

    {


        InputStreamReader reader = new InputStreamReader(System.in,Charset.defaultCharset());
        BufferedReader bufferedreader = new BufferedReader(reader);

        String scan = null;

        boolean nextfound=false;

        try 
        {
           while(null!=(scan= bufferedreader.readLine())&&nextfound)

            {
              scan=scan.replace('i', 'a');

            }
        } 
        catch (IOException ioex) 
        {
            System.err.println(ioex.getMessage());
        }

        if (scan.equals("micro")) 
        {
            System.out.println("The result is macro!");
        } 


        else

        {
            System.out.println("Something else!");
        }
    }
}

scan 可能是 null 也许你可以简单地反转你的测试

if ("micro".equals(scan){
   System.out.println("The result is Macro!")
}

还有一些错误:

scan=scan.replace('i', 'a'); 永远不会被执行,因为 nextfound 总是 false

while(null!=(scan= bufferedreader.readLine())&&nextfound)
{
    scan=scan.replace('i', 'a');
}

bufferReader 永远不会关闭您应该在代码中添加 finally

...
catch (IOException ioex) {
    System.err.println(ioex.getMessage());
} finally {
    try {
        reader.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

如果您的输入为空,那么您的 while 循环将不会执行。 scan 将设置为 null,瞧,NullPointerException