자바에서 문자열을 어떻게 비교하나요?
자바(Java)에서 문자열(String)을 비교하는 방법은 주로 두 가지가 있습니다.
문자열을 비교할 때 자바는 일반 변수 비교와 문자열 내용 비교를 구분하기 때문에 올바른 방법으로 비교하는 것이 중요합니다.
--- 1. `==` 연산자로 문자열 비교하기 - `==` 연산자는 두 변수가 동일한 객체(메모리 주소) 를 가리키고 있는지 여부를 비교합니다.
- 즉, 문자열의 내용이 같은지 비교하는 것이 아니라 참조하는 메모리 주소가 같은지 확인하는 것입니다.
- 일반적으로 문자열 리터럴(literal)끼리는 값이 같으면 같은 주소를 가리키기도 하지만, new String() 객체를 만들면 서로 다른 주소를 가지므로 같은 내용이라도 `==`는 `false`를 리턴합니다.
```java String a = "hello"; String b = "hello"; String c = new String("hello"); System.out.println(a == b); // true (같은 문자열 리터럴의 경우 같은 주소) System.out.println(a == c); // false (new String 객체는 다른 주소) ``` > 따라서, 문자열의 내용 비교를 위해서는 `==` 을 쓰면 안 됩니다.
--- 2. `equals()` 메소드로 문자열 내용 비교하기 - `String` 클래스는 `equals()` 메소드를 오버라이드하여 문자열의 내용을 비교 하도록 구현되어 있습니다.
- 문자열이 실제 같은 문자 시퀀스를 가지고 있으면 `true`를 반환합니다.
- 일반적으로 문자열 비교 시 가장 많이 사용하는 방법입니다.
```java String a = "hello"; String b = new String("hello"); System.out.println(a.equals(b)); // true ``` --- 3. `equalsIgnoreCase()` 메소드 - 대소문자를 구분하지 않고 문자열 내용을 비교할 때 사용합니다.
```java String a = "Hello"; String b = "hello"; System.out.println(a.equalsIgnoreCase(b)); // true ``` --- 4. `compareTo()` 메소드 (사전 순 비교) - 두 문자열을 사전식(lexicographical) 순서로 비교할 때 사용 - 반환값은 다음과 같습니다.
- 0 : 두 문자열이 같음 - 음수 : 호출한 문자열이 비교 대상보다 사전순으로 앞에 있음 - 양수 : 호출한 문자열이 비교 대상보다 사전순으로 뒤에 있음 ```java String a = "apple"; String b = "banana"; System.out.println(a.compareTo(b)); // 음수 ``` | 방법 | 비교 대상 | 설명 | 예시 | |---------------------|--------------------|---------------------------------|------------------------------| | `==` | 참조 주소 | 객체 레퍼런스 비교(같은 객체인지) | `a == b` | | `equals()` | 문자열 내용 | 문자 시퀀스가 같은지 비교 | `a.equals(b)` | | `equalsIgnoreCase()` | 문자열 내용 | 대소문자 구분 없이 비교 | `a.equalsIgnoreCase(b)` | | `compareTo()` | 문자열 내용 | 사전식 순서로 비교 | `a.compareTo(b)` | --- 결론 - 문자열 내용을 비교할 때는 반드시 `equals()` 메소드를 사용하세요.
- `==` 연산자는 문자열 내용을 비교하는 용도로 적절하지 않습니다.
- 대소문자를 무시하고 비교할 때는 `equalsIgnoreCase()` 를 쓰고, 사전순서 비교가 필요할 때는 `compareTo()` 를 사용합니다.
--- 예제 코드 ```java public class StringCompareExample { public static void main(String[] args) { String str1 = "Java"; String str2 = new String("Java"); String str3 = "java"; // 참조 주소 비교 System.out.println(str1 == str2); // false // 내용 비교 System.out.println(str1.equals(str2)); // true // 대소문자 무시 내용 비교 System.out.println(str1.equalsIgnoreCase(str3)); // true // 사전순 비교 System.out.println(str1.compareTo(str3)); // 음수 (J < j) } } ``` 이와 같이 자바에서 문자열을 올바르게 비교하는 방법을 이해하면 버그 없이 안정적인 문자열 처리를 할 수 있습니다.