java&spring

[Java] 문자열(String) 비교하기(==, equals)

sungjine 2022. 3. 4. 00:17
반응형

문자열을 비교할 수 있는 여러 방법이 있는데 이 중에서 == 연산자와 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 메서드를 사용하면 좋다.

반응형