Java에서, String의 equals 메서드에 대한 한가지 Tip
Java를 하는 사람은 다들 알 듯이 String형의 값의 비교는 동등 비교(==)를 사용하면 안되고 equals 메서드를 사용해야합니다.
이때 한가지 주의해야할 Tip이 있습니다.
우선 소스를 보겠습니다.
1 : final String FINAL_STRING = "hello world"; 2 : String str = null; 3 : 4 : if(FINAL_STRING.equals(str)) { 5 : System.out.println("문자열 값이 같습니다."); 6 : }else{ 7 : System.out.println("문자열 값이 다릅니다."); 8 : } 9 : 10: if(str.equals(FINAL_STRING)) { 11: System.out.println("문자열 값이 같습니다."); 12: }else{ 13: System.out.println("문자열 값이 다릅니다."); 14: }
우선 2개의 String형 변수가 있습니다. 하나는 FINAL_STRING 이라는 문자상수고 하나는 str라는 변수입니다.
위 코드를 실행하면 4번 라인의 조건문은 정상적으로 수행되고 10번라인의 조건문은 에러가 발생합니다.
문자열 값이 다릅니다.Exception in thread "main" java.lang.NullPointerException at helloworld.HelloWorld.main(HelloWorld.java:10)
보시다시피 equals 메서드의 인자에는 null 값이 들어가도 되지만 equals 메서드를 호출하는 변수는 null이면 예외가 발생합니다.
이를 실제로 적용하시는 경우는 이런 경우가 있습니다.
사용자로부터 값을 입력받거나 하는 등 값이 변하는 String형 변수가 있고, 그 변수의 값을 프로그램이 고정으로 사용하는 문자열과 값 비교를 한다면, 꼭 고정된 문자열에서 equals 메서드를 호출하고 동적으로 변할 수 있는 변수를 인자로 넣어줘야 예외가 발생하지 않습니다.
동적으로 변하는 String형 변수에 절대적으로 null이 들어오지 않는다라는 확신이 있다면 아무렇게나 해도 되겠지만 혹시나 만에하나라도 null이 생길수 있는 경우를 대비해서 절대적으로 null이 될 수 없는 문자 상수나 프로그램 내에서 고정적으로 문자열을 할당한 변수를 equals 앞에 써주는게 좋습니다.
결론,
{절대null이 되지 않는 String}.equals(null이 될수도 있는 String)
댓글 없음:
댓글 쓰기