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
。
我正在使用 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
。