"".equals(str) vs str.equals("")
로 어느 것이 맞는 것인지 헷갈릴때가 있었다.
아니 아직도 헷갈린다.
어떤 방식이 맞는 것인가? 또한 NullPointException 에 대해 발생 하는 건 어떤 것인가?
두가지를 따져 보기로 하자.
오늘 내 소스를 보더니 사수가 equals로 null 체크시 객체 생성으로 메모리 효율성이 떨어질수 있으니
if( str == null && str.length() == 0 ) 에 대한 사용을 권유 받았다.
그래서 정확히 짚고 넘어가고 싶어 야밤에 정리 해 놓는다.
구글링에서 찾은 결과,
이유까지 설명해주면서 나에게 너무나 이해가 쉽게 될 수있는 두 곳이 있었다.
한곳은 nullPointException 처리에 대한 조건문 처리,
다른 한곳은 equals에 대한 param 위치
==========================================================================
1. nullPointException 처리
equals("")를 사용하면 불필요하게 새로운 스트링인 ""를 생성하게 되고함수 내부에서 몇 번의 비교후에 다른 스트링으로 형변환 및 치환도 합니다.
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://blog.naver.com/PostView.nhn?blogId=led73loh&logNo=40168301301