Stack 자료구조의 특정 객체를 파라미터로 받아서 해당 요소가 있으면 위치를 반환해주는 search() 메서드를 구현해보던 중 equals()로 비교를 할 때, 전달 받은 파라미터가 null인 경우를 따로 체크하는 부분이 있었다.
public synchronized int lastIndexOf(Object o, int index) {
if (index >= elementCount)
throw new IndexOutOfBoundsException(index + " >= "+ elementCount);
// Obect o 객체가 null 인 경우
if (o == null) {
for (int i = index; i >= 0; i--)
if (elementData[i]==null)
return i;
} else {
for (int i = index; i >= 0; i--)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
equals()를 사용할 때는 주의해야 될 부분이 있는데 값을 비교할 때 앞에 null인 객체가 들어올 경우 NullPointerException 예외가 발생하는 것이다.
public int lastIndexOf(Object value) {
int index = array.length - 1;
for (int i = index; i >= 0; i--) {
// value가 Null인 경우
if (value.equals(array[i])) {
return i;
}
}
return -1;
}
객체 참조를 하기 때문에 당연한 부분이지만 전에도 이런 실수를 많이 했던 것 같다. 그래서 객체와 문자열의 값을 비교하는 경우에는 문자열을 왼쪽에 입력하고, 객체끼리 비교하는 경우에는 null 값을 고려해서 코드를 짜도록 해야겠다.
'Java' 카테고리의 다른 글
[Java] 제네릭에서 Raw Type 선언 주의 (이펙티브 자바) (0) | 2022.08.16 |
---|---|
[Java] HashMap put() 반환값 (null 조심) (0) | 2022.08.09 |
[Java] System.arraycopy() 와 Arrays.copyOf() 차이점 (JMH 벤치마킹) (0) | 2022.08.03 |
[Java] ENUM의 활용 ( (0) | 2022.07.22 |
[Java] 자바 예외 (Exception) (0) | 2022.06.19 |