개발자에게 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
등 일부 코드에서는 예외가 필요한 경우도 있습니다.
그래서 항상 개발자는 신중한 코딩이 필요합니다.