Что означает возможное разыменование нулевого указателя в findbug?

Я использую сонар, и у меня есть такое нарушение от него для мира моего кода:

 Correctness - Possible null pointer dereference  

кто-нибудь знает об этом правиле в findbugs? Я много искал, но не могу найти хороший пример кода (на Java), который описывает это правило, к сожалению, сайт findbugs не имел никакого примера кода или хорошего описания этого правила.

Почему появляется это нарушение?

5 ответов


Он говорит:здесь

NP: Possible null pointer dereference (NP_NULL_ON_SOME_PATH)

существует ветвь оператора, которая при выполнении гарантирует, что значение null будет разыменовано, что создаст исключение NullPointerException при выполнении кода. Конечно, проблема может заключаться в том, что ветвь или оператор неосуществимы и что исключение нулевого указателя никогда не может быть выполнено; решение, которое выходит за рамки возможностей FindBugs.

Если бы ты отправил какой-то код, на который было бы легче ответить.

редактировать я не вижу много документации, но вот один пример! Надеюсь, это поможет!


пример кода что-то вроде этого.

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.

ОК

Это два простых примера : Первый дает : возможно разыменование null-указателя

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

простой ?


на простом языке, если значение переменной назначено как null, и вы пытаетесь получить к нему доступ с помощью любого встроенного метода, такого как add/get. Затем проблема разыменования нулевого указателя поставляется с SONAR. Потому что есть изменения для него go null и throw null исключение указателя. Постарайтесь избежать этого, если это возможно.

Ex File file=null; файл.метод getname(); бросит "возможно разыменование указателя"

Это может произойти не сразу, как указано в примере, это может быть непреднамеренно.


я получил эту проблему со следующим фрагментом кода: -

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();
    }

здесь br BufferedReader может быть null на br.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.