자바에서 문자열을 비교하려면 기본형 타입(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
참고자료
https://devdocs.io/openjdk~11/java.base/java/lang/string
'프로그래밍언어 > Java' 카테고리의 다른 글
[Java] JUnit 이란? (1) | 2022.03.20 |
---|---|
[Java] 문자열에서 원하는 문자 추출하기 (0) | 2022.02.10 |
자바(Java) 문자열(String) 대문사, 소문자 변환하기 (0) | 2022.02.09 |
자바(Java) 문자열 자르기(split, subString) 사용법 (0) | 2022.02.09 |
자바(Java) HashMap, HashTable, ConcurrentHashMap 차이 (0) | 2021.10.27 |
댓글