자바에서 string비교는 어떻게 하나요?

조회수 1750회

자바에서 string비교는 어떻게 하나요? 저는 지금까지 string을 비교할 때 == 연산자를 사용해왔습니다. 근데 계속 사용하다보니 bug가 발생하는 상황이 자주있었고, 일부분을 .equals()로 변경한 후에 bug를 해결했습니다. == 연산자가 문제인건가요? ==연산자는 언제 사용해야만하고 언제 사용하면 안되는 거죠? ==와 .equals의 차이점이 뭔가요?

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    == 은 레퍼런스가 같은지 검사하고(같은 object인지 아닌지) .equals()은 값이 같은지 검사합니다(논리적으로 같은지 아닌지). Objcect.equals()은 .equals()를 호출하기 전에 null인지 아닌지부터 검사합니다. so you don't have to (available as of JDK7, also available in Guava).????

    결과적으로, 두개의 string변수가 같은 값을 가지는지 비교하는 것은 Objects.equals()를 사용하는 것과 같습니다.

    // 다음 두 값은 같습니다
    new String("test").equals("test") // --> true 
    
    // 하지만 같은 object는 아니죠
    new String("test") == "test" // --> false 
    
    // 아래 상황도 마찬가지입니다.
    new String("test") == new String("test") // --> false 
    
    // 아래 경우는 두개의 리터럴이 컴파일러에 의해 상수화 되기때문에
    // 같은 object를 참조하게 됩니다.
    "test" == "test" // --> true 
    
    // Objects.equals() 메소드를 사용하는 것이 좋은 방법입니다.
    Objects.equals("test", new String("test")) // --> true
    Objects.equals(null, "test") // --> false
    

    아마 항상 Objcects.equals() 메소드를 사용하게 될 것입니다. 아주 드문 상황(상수화된 strings을 사용하는 경우)에서 == 연산자를 사용합니다.

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.