반응형
MisplacedNullCheck
우선순위 : 3
다음의 샘플 코드의 if문 내에 있는 null 체크 구문은 모두 잘못된 위치이다. 이 구문들은 만일 a가 null이라면
NullPointerException이 발생한다.
샘플코드1
샘플코드2
1 2 3 4 5 | public class Foo { void bar() { if (a.equals(baz) || a == null) {} } } |
부연 설명
논리 연산에서 &&와 ||는 연산자 앞에 있는 조건을 먼저 확인하고 그 결과에 따라 연산자 뒤에 있는 조건을
확인할 지 말 지 결정을 하게 된다. 즉 어떤 상황이건 a.equals(baz)를 먼저 수행하게 되는데 만일 a가 null이라면
null인 객체로부터 equals라는 메서드를 호출하였으니 NullPointerException이 발생하는 것은 당연하다.
참고로 &&는 선행 구문이 거짓이면 뒤의 구문을 확인하지 않고 진행되며 ||의 경우 반대로 선행 구문이 참인 경우
뒤에 구문은 확인하지 않고 진행된다.
즉, if (a != null && a.equals(baz))로 표현한다면 만일 a가 null인 경우 a != null은 거짓이 되고 a.equals(baz)는
수행되지 않으므로 NullPointerException이 발생하지 않는다. ||의 경우도 마찬가지~
반응형
'Development > JAVA' 카테고리의 다른 글
[디비 파기 | PMD] CheckResultSet (0) | 2016.02.28 |
---|---|
[디비 파기 | PMD] BrokenNullCheck (0) | 2016.02.28 |
[디비 파기 | PMD] AvoidDecimalLiteralsInBigDecimalConstructor (0) | 2016.02.28 |
[디비 파기 | PMD] ClassCastExceptionWithToArray (0) | 2016.02.28 |
[디비 파기 | PMD] UnconditionalIfStatement, CollapsibleIfStatements (0) | 2016.02.28 |