2011-12-01 5 views
13

더 좋은 방법이 있는지 궁금합니다. 비효율적이라고 생각합니다. 문제는 DB의 이유로 때로는 null이 될 수있는 문자열을 비교해야합니다.null 일 수있는 문자열을 비교하는 더 좋은 방법

public static boolean compareStrings(String str1, String str2){ 

    if(str1 == null && str2 == null) return true; 

    if(str1 != null && str2 != null){ 
     if(str1.equals(str2)) 
      return true; 
    } 

    return false; 
} 
+0

은 HTTP로 마이그레이션 널 안전 두 문자열 비교 등호가 다음 아파치 커먼즈 인 StringUtils를 사용하여 열려있는 경우 //codereview.stackexchange.com/...를? –

+0

미안 해요 덕분에 나중에 그렇게 될 것입니다 – Maurycy

답변

46

일반적인 관용구는 이것이다 :

return (str1 == null ? str2 == null : str1.equals(str2)); 
+19

저는 android와 TextUtils.equals (a, b)에서이 작업을하고 있다고 덧붙이고 싶습니다. 정확하게 이것을 할 – Maurycy

1

이 프로그램의 정상적인 실행시 병목 현상이 발생하는 경우이 코드는 비효율적이다. 이 경우인지 알 수있는 유일한 방법은 프로파일 러를 통해 프로그램을 실행하는 것입니다. 그렇게 할 때까지는이 기능이 성능 문제를 야기한다는 사실을 알기 전 까진 걱정하지 않을 것입니다.

+0

프로파일 링이없는 특히 걱정 스럽지만 다소 까다 롭습니다. 내가 메모리 누수를 발견하지 못한다면 나는 보통 프로파일 러를 사용하지 않는다. 내 정적 메서드를 개발하는 것보다 더 나은 구현 방법이 있는지 궁금해했습니다. 고맙습니다. – Maurycy

29

당신은 이것이 잠재적으로 데이터베이스에서 오는 것이라고 말합니다. 이 시점에서 몇 가지 무효 테스트를 둘러싼 비효율은 데이터베이스 쿼리 비용과 비교할 때별로 중요하지 않습니다. 나는 가독성에 초점을 맞출 것이다. 이를 위해

, 나는 Guava하고 Objects 클래스 사용하기 시작할 것입니다 :

boolean equal = Objects.equal(a, b); 

내가 그 기본적 Taymon의 코드에 따라 구현 될 기대를 -하지만 장소에있는 것이 좋다 .

편집 : Java 7 이상에서는 구아바가 필요하지 않습니다. java.util.Objects.equal(a, b)을 사용해도됩니다.

+0

"가독성"에 관한 한 ... 실제로는'object.ReferenceEquals'를 생각하게합니다. 좋은 것은 아닙니다. ( –

+0

@pst : 정적 인'object.Equals' 메서드가 포함되어 있습니다. –

+11

더 최근에이 언어를 사용하는 사람은 Java 7에서도 마찬가지입니다. [Objects.equals] (http://docs.oracle.com/javase/7 /docs/api/java/util/Objects.html#equals%28java.lang.Object,%20java.lang.Object%29) –

4

당신은 그들이

관련 문제