2017년 5월 25일 목요일

[JAVA] String의 equals 메서드에 대한 한가지 Tip

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)

댓글 없음:

댓글 쓰기