https://www.acmicpc.net/problem/5639
최근 이 문제를 풀었고, 코드가 분명 이클립스 IDE에서는 잘 돌아갔는데 제출만 하면 RuntimeError - NullPointerException이 떴다.
죽어라 봐도 모르겠어서 결국 다른 분 블로그의 답을 확인했는데, 다른 부분은 전부 같고
//내 코드
if (temp.equals("") || temp == null) {
// temp가 null이거나 빈 문자열인 경우 실행될 코드
}
//답안 코드
if (temp == null || temp.equals("")) {
// temp가 null이거나 빈 문자열인 경우 실행될 코드
}
이 부분만 달랐다. 즉, null과 비교하느냐, 객체의 내용이 비어있느냐를 검사하는 순서만 달랐다.
BufferedReader의 readLine() 메서드는 더 이상 입력받는/읽을 데이터가 없을 때 null값을 반환한다.
equals() 메서드는 객체를 비교할 때 사용된다.
하지만 null은 객체가 아니므로 내 코드처럼 temp.equals("") 를 먼저 조사할 경우, NPE가 발생하게 된다.
따라서 null 일때와 비어있을 때를 모두 조사하기 위해서는 temp==null 조건을 먼저 검사하고 temp.equals("") 비교를 수행하는 것이 안전하다.
//답안 코드
if (temp == null || temp.equals("")) {
// temp가 null이거나 빈 문자열인 경우 실행될 코드
}
이 경우 temp가 null일 경우, 뒤의 temp.equals("") 조건은 검사하지 않고 바로 if 블록으로 집입한다.
'Java > 문법, 자료구조, 알고리즘' 카테고리의 다른 글
@Builder.Default (0) | 2023.04.16 |
---|---|
Builder 패턴과 @Builder 어노테이션 (0) | 2023.04.15 |
Tree, BinaryTree (0) | 2023.04.02 |
PriorityQueue (0) | 2023.04.01 |
== 와 .equals() 차이 (0) | 2023.03.28 |