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


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

  • 2016년 05월 17일에 작성됨

조회수 107


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을 사용하는 경우)에서 == 연산자를 사용합니다.

  • 2016년 05월 18일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close