프로그래밍언어/Java

자바(Java) String 문자열 비교하기

멍토 2022. 2. 10.

자바에서 문자열을 비교하려면 기본형 타입(primitive type)인 int나 long, char와 다른방식으로 비교를 해야한다.

 

이번 포스팅에서는 왜 그런지와 equals 메서드에 대해서 알아보자.

 

== 

== 의 비교방법은 주소를 이용한 비교이다.

기본형 타입의 경우 값이 같으면 비교가 되고 객체의 경우는 같은 객체일 경우에만 true가 나오게 된다.

@Test
@DisplayName("String은 비교할때 == 로 비교하면 안된다.")
void equals1() {
    //given
    String a = "멍토블로그";
    String b = new String("멍토블로그");

    //when
    boolean value = a == b;

    //then
    assertThat(value).isFalse();
}

일반적이지 않은 경우지만 문자열을 생성할때 new로 생성한 후 비교를 하면 false가 나오게 된다.

 

저는 그냥 비교하니까 true 나오던데요? 라고 하는 사람도 있다.

그것은 자바에서 String을 관리하는 pool이 있어서 한번 사용한 문자열을 재사용하기 때문이다.

그래서 new String을 쓰는것 보다 ""로 생성해 불변객체의 장점을 가져가자.

 

 

equals

앞으로 객체를 만들게 되면 많이쓰게될 메서드이다.

equals 메서드는 hash값이 일치하면 각 원소들을 비교하는 메서드이다.

 

@Test
@DisplayName("String은 비교할때 equals 메서드로 비교해야 한다.")
void equals2() {
    //given
    String a = "멍토블로그";
    String b = new String("멍토블로그");

    //when
    boolean value = a.equals(b);

    //then
    assertThat(value).isTrue();
}

 

 

문자열 a와 b는 다른주소를 가지고 있어서 == 비교때는 false가 나왔다.

여기서 equals로 비교해주면 true가 나오게 된다.

 

 

공부해보기

따로 공부가 하고 싶은 사람들은 아래 깃허브에서 코드를 받아서 연습을 하면 된다.

자바공부용 깃허브 : https://github.com/daum7766/java-study

 

GitHub - daum7766/java-study: test 코드를 기반으로 자바의 기능을 학습한다.

test 코드를 기반으로 자바의 기능을 학습한다. Contribute to daum7766/java-study development by creating an account on GitHub.

github.com

 

 

참고자료

https://devdocs.io/openjdk~11/java.base/java/lang/string

 

DevDocs

 

devdocs.io

 

 

댓글

💲 광고입니다.