null str checking

Program_Language/Java 2013. 7. 23. 00:47 Posted by Request

"".equals(str) vs str.equals("")

로 어느 것이 맞는 것인지 헷갈릴때가 있었다.

아니 아직도 헷갈린다.

어떤 방식이 맞는 것인가? 또한 NullPointException 에 대해 발생 하는 건 어떤 것인가?

두가지를 따져 보기로 하자.

 

오늘 내 소스를 보더니 사수가 equals로 null 체크시 객체 생성으로 메모리 효율성이  떨어질수 있으니

 

if( str == null && str.length() == 0 ) 에 대한 사용을 권유 받았다.

 

그래서 정확히 짚고 넘어가고 싶어 야밤에 정리 해 놓는다.

 

 

구글링에서 찾은 결과,

이유까지 설명해주면서 나에게 너무나 이해가 쉽게 될 수있는 두 곳이 있었다.

한곳은 nullPointException 처리에 대한 조건문 처리,

다른 한곳은 equals에 대한 param 위치

 

==========================================================================

1. nullPointException 처리 

equals("")를 사용하면 불필요하게 새로운 스트링인 ""를 생성하게 되고
함수 내부에서 몇 번의 비교후에 다른 스트링으로 형변환 및 치환도 합니다.
반면 length() 함수는 내장객체인 int 변수 하나만 리턴하면 되므로 빠릅니다.
아래 String.equals() 함수와 String.length() 함수 소스를 확인해보세요.
-----------------------------------------
 public int length()
 {
     return count;
 }
-----------------------------------------
    public boolean equals(O bject obj)
    {
        if(this == obj)
            return true;
        if(obj instanceof String)
        {
            String s = (String)obj;
            int i = count;
            if(i == s.count)
            {
                char ac[] = value;
                char ac1[] = s.value;
                int j = offset;
                int k = s.offset;
                while(i-- != 0)
                    if(ac[j++] != ac1[k++])
                        return false;
                return true;
            }
        }
        return false;
    }

 

[ 출처 :   http://tazz.tistory.com/30  ]

 역시 불필요한 메모리 확보 없이 프로그램은 속도가 갑이다.

==========================================================================

2.equals 의 올바른 param 위치

 

 1)equals는 boolean값을 반환한다.

 2)매개변수로 Object 클래스를 input 시킨다.

 3)Compares this string to the specified object.(문자열을 object와 비교한다.)

 

"문자열".equals(obj)

 

 

String str = request.getParameter("param");

str.equals("");

 

대신 맞게 문법을 사용해도 불구하고 이런 경우,

str.equest(""); 이 null.equals(""); 로 비교 될수 있어

nullPointException 이 날수 있는 구조이다.

 

그러므로 null 체크에 대한 if문에서는 안 쓰는게 좋다가 결론이다.

 

[출처 : http://imovator.tistory.com/entry/%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%B9%84%EA%B5%90%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B3%A0%EC%B0%B0-equals]

 

스크립 : http://blog.naver.com/PostView.nhn?blogId=led73loh&logNo=40168301301