개발자에게 NullPointerExcption 오류는 언제나 골칫거리입니다.
잊을만 하면 나타나서 개발자를 괴롭히거든요.
자바에서 equals 메소드를 쓸 때도 주의해야 합니다.
먼저 오류 상황을 보겠습니다.
String A = null;
if (A.equals("A")) {
System.out.println("true");
} else {
System.out.println("false");
}
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "A" is null
java.lang.String 클래스의 equals 메소드는 변수가 String일 경우에 참조가 가능합니다.
따라서 변수에 null 값이 들어가면 오류가 발생합니다.
참고로 equals 메소드의 구현 코드를 보겠습니다.
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String aString = (String)anObject;
if (!COMPACT_STRINGS || this.coder == aString.coder) {
return StringLatin1.equals(value, aString.value);
}
}
return false;
}
NullPointerException 오류를 막기 위한 몇 가지 방법이 있습니다.
첫 번째는 변수에 기본 값을 지정하는 방법입니다.
하지만 언제든 null 값이 들어갈 수 있기 때문에 좋지 않습니다.
두 번째는 변수의 null 값을 미리 체크하는 방법입니다.
이것 또한 멀티 조건이 필요해서 권장하지 않습니다.
if (A != null && A.equals("A")) {
System.out.println("true");
} else {
System.out.println("false");
}
세 번째는 리터럴 문자로 equals 메소드를 호출하는 방법입니다.
간단히 구현이 가능해서 권장하는 방법입니다.
if ("A".equals(A)) {
System.out.println("true");
} else {
System.out.println("false");
}
개발을 하면 무의식 중에 변수 - 리터럴 순서로 코딩을 하게 됩니다.
하지만 equals 등 일부 코드에서는 예외가 필요한 경우도 있습니다.
그래서 항상 개발자는 신중한 코딩이 필요합니다.