티스토리 뷰
반응형
문자열을 비교할 수 있는 여러 방법이 있는데 이 중에서 == 연산자와 equals 메서드를 활용하는 방법 비교한다.
비교하는 내용을 작성하기에 앞서 문자열 생성 방식에 대한 설명이 필요하여 먼저 작성한다.
문자열을 생성할 수 있는 방법은 리터럴 방식과 생성자를 사용하는 방식이 있다.
String str1 = "string" // 리터럴 방식
String str2 = new String("string") // 생성자 활용 방식
여기서 리터럴 방식으로 문자열을 만들 경우 같은 별도의 String Contant Pool이라는 영역에 배치되기 때문에 동일한 문자열을 생성하면 같은 주솟값을 가지게 된다.
String str1 = "a";
String str2 = "a";
System.out.println(str1 == str2); // true
이제 == 연산자와 equals 메서드를 활용하는 방법 비교해보자.
== 연산자의 경우 주소를 비교하고 equals 메서드의 경우 값을 비교한다. 때문에 여러 가지를 테스트했을 때 아래와 같은 결과가 나온다.
== 연산자 테스트
String str1 = "a";
String str2 = "a";
String str3 = new String("a");
String str4 = new String("a");
System.out.println(str1 == str2); // true (String Contant Pool에 배치되기 때문이다.)
System.out.println(str1 == str3); // false
System.out.println(str3 == str4); // false
equals 메서드 테스트
String str1 = "a";
String str2 = "a";
String str3 = new String("a");
String str4 = new String("a");
System.out.println(str1.equals(str2)); // true
System.out.println(str1.equals(str3)); // true
System.out.println(str3.equals(str4)); // true
위와 같은 결과가 나오기 때문에 문자열을 비교할 때는 equals 메서드 사용을 권장한다.
equals 메서드를 사용할 때 주의할 점은 NullPointException이다.
변수에 null이 들어가 있는데 equals 메서드를 사용하려 하면 NullPointException 뜨게 되는데 이를 방지할 필요가 있다.
1) null 체크를 먼저 진행하는 방법
if (strValue1 != null) {
return strValue1.equals(strValue2);
} else {
return false;
}
간략한 버전
return strValue1!=null?strValue1.equals(strValue2):false
2) 비교 대상이 리터럴 문자일 경우
"literal".equals(strValue);
* 영문자를 비교하고자 할 때 대소문자를 무시하면서 비교할 때는 equalsIgnoreCase 메서드를 사용하면 좋다.
반응형
'java&spring' 카테고리의 다른 글
[Java] toString 메서드 (0) | 2022.03.18 |
---|---|
[Java] 클로저(Closure) (0) | 2022.03.06 |
클래스 경로(Class Path)와 클래스 로더(Class Loader) (0) | 2017.08.11 |
[Java] 불변 객체(Immutable Object) (0) | 2017.07.14 |
[Java] 문자열 자르기 비교(split vs StringTokenizer) (0) | 2017.05.29 |
댓글