2014-11-06 4 views
1

코드의 성능을 검사하고 있습니다. 자바 문자열 값 비교에서 "".equals(string)을 가지고 있지만 더 나은 성능을 제공하는 정보가 있습니다. string.trim().length() == 0. 사실입니까? "".equals(string)은 문자열이 null 인 경우에도 처리 할 것이기 때문에 의심 스럽지만 두 번째 것은 처음에는 null 체크를해야만 문자열을 다듬을 수 있습니다.문자열 비교의 성능

if("".equals(string)) 또는 if(string.trim().length() == 0) 중 하나를 사용하는 것이 더 좋습니다.

+6

이 두 가지가 다릅니다 –

+0

어떻게 다를 수 있습니까? – majji

+1

문자열을 다듬습니다. 하나는''''에 대해 true를 반환하고, 다른 하나는 false를 반환합니다. – Thilo

답변

4

string.trim().length() == 0"".equals(string)과 같은 결과가 아닙니다. 서로 다른 목적으로 사용되기 때문에 성능 비교에는 의미가 없습니다. (trim 배열의 복사본을 포함하기 때문에, 투기의 목적을 위해 string.trim().length() == 0은 일반적으로 속도가 느려집니다.)

  • string.trim().length() == 0

    는 "문자열이 비어하지 않을 수 있지만 공백이 포함되어"를 의미한다.
  • "".equals(string)은 "문자열이 비어 있거나 널입니다"를 의미합니다.

예를 들어 "".equals(" ")은 false로 평가되지만 " ".trim().length() == 0은 true로 평가됩니다.

이제 "".equals(string)string != null && string.length() == 0의 결과는 같습니다. string != null && string.length() == 0기술적으로는 일 수는 있지만 실제로는 중요하지 않습니다. 그 차이는 수 나노초 수준으로 아주 작을 것입니다. "".equals(string)은 길이를 비교할 때만 표시되기 때문입니다.

또한 일반적으로 이것은 최적화에 대해 걱정할만한 유형이 아닙니다.

+0

글쎄, 마지막 두 표현식은'string'이'null' 인 경우에도 같지 않습니다 ... – Thilo

+0

@Thilo 네, 맞습니다. – Radiodef

+0

예 @Thilo, 그 경우 나는 생각한다. 동등하다. – majji

0

이에게 두 가지 접근 방식은
접근 한 다른 :
if("".equals(string)) - 당신의 문자열을 비교 두 문자열이 같은 내용을 가진 경우는 true를 돌려줍니다. refer java doc

부울 등호 (anObject를 객체)
이 문자열을 지정된 객체와 비교합니다.

방법 2 :

if(string.trim().length() == 0) - 두 문자열이 동일한 길이를 가지는 경우 그것은 true를 돌려줍니다, 문자열의 길이를 비교합니다.

null 프로패인 예외를 처리하려면 먼저 문자열이 두 번째 방법에서 null인지 아닌지 확인한 다음 trim() 메서드를 문자열 개체에 호출해야합니다.

+0

"null prointer 예외를 처리하려면 먼저 문자열이 두 번째 방법에서 null인지 아닌지 확인한 다음 문자열 객체에 trim() 메서드를 호출해야합니다. 문자열이 null이면 더 좋을까요? 문자열이 null 인 경우 – majji

+0

접근 방식 1이 더 좋습니다. 그것은 널 포인터 예외를 통해서는 안됩니다. –

관련 문제