19

我正在使用声纳,我从它那里得到了这种违规行为,以便我的代码和平:

 Correctness - Possible null pointer dereference  

有人知道 findbugs 中的这条规则吗?我进行了很多搜索,但找不到描述此规则的良好示例代码(Java 中),不幸的是 findbugs 站点没有任何示例代码或有关此规则的良好描述。

为什么会出现这种违规行为?

4

5 回答 5

19

示例代码是这样的。

String s = null ;
if (today is monday){
    s = "Monday" ;
else if (today is tuesday){
    s = "Tuesday" ;
}
System.out.println(s.length()); //Will throw a null pointer if today is not monday or tuesday.
于 2013-10-03T20:05:05.947 回答
18

这里

NP: Possible null pointer dereference (NP_NULL_ON_SOME_PATH)

有一个语句分支,如果执行,则保证将取消引用空值,这将在执行代码时生成 NullPointerException。当然,问题可能是分支或语句不可行,空指针异常永远无法执行;决定这超出了 FindBugs 的能力。

如果您发布了一些代码,则更容易回答。

编辑我没有看到很多文档,但这里有一个例子!希望这可以帮助!

于 2012-09-03T05:14:43.780 回答
3

好的

这是两个简单的例子:第一个给出一个:可能的空指针取消引用

1. Error
     ArrayList a = null;
     a.add(j, PointSet.get(j));
     // now i'm trying to add to the ArrayList 
     // because i'm giving it null it gives me the "Possible null pointer dereference"

2. No Error
     ArrayList a = new ArrayList<>();
     a.add(j, PointSet.get(j));
     // adding elements to the ArrayList
     // no problem

简单的 ?

于 2014-09-22T22:21:56.647 回答
1

用简单的语言来说,如果一个变量值被赋值为 null,并且您尝试使用任何内置方法(如 add/get)来访问它。然后 SONAR 会出现空指针取消引用问题。因为有变化让它为空,并抛出空指针异常。如果可能,尽量避免它。

例如:

File file=null;
file.getName();

将抛出“可能的空指针取消引用”

它可能不会像示例中提到的那样直接发生,它可能是无意的。

于 2017-02-08T04:12:22.213 回答
1

我用以下代码遇到了这个问题:-

BufferedReader br = null;
    String queryTemplate = null;
    try {
        br = new BufferedReader(new FileReader(queryFile));
        queryTemplate = br.readLine();
    } catch (FileNotFoundException e) {
      //  throw exception
    } catch (IOException e) {
       // throw exception
    } finally {
        br.close();
    }

在这里,brBufferedReader 可以nullbr.close(). 然而,它只能在null失败new BufferedReader()时出现,在这种情况下,我们会抛出相关的异常。

因此这是一个错误的警告。Findbugs文档提到相同的: -

   This may lead to a NullPointerException when the code is executed.  
   Note that because FindBugs currently does not prune infeasible 
   exception paths, this may be a false warning.
于 2017-09-08T11:38:58.827 回答