자바에서 문자열을 어떻게 비교하나요?

자바(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) } } ``` 이와 같이 자바에서 문자열을 올바르게 비교하는 방법을 이해하면 버그 없이 안정적인 문자열 처리를 할 수 있습니다.


관련 게시글

자바에서 병렬 처리를 구현하는 방법은 무엇인가요?

자바에서 병렬 처리는 여러 작업을 동시에 실행하여 프로그램의 성능과 응답성을 향상시키는 기법입니다....

문제 해결 및 면접 질문

문제 해결 및 면접 질문에 관한 글 --- 1. 문제 해결의 중요성 문제 해결 능력은 개인과...

자바에서 중복된 요소를 제거하는 방법은 무엇인가요?

자바(Java)에서 중복된 요소를 제거하는 방법에는 여러 가지가 있습니다. 주로 컬렉션프레임워크를 활용하...

자바 Collections에서 정렬하는 방법은 무엇인가요?

자바 Collections에서 정렬하는 방법에 대해 설명드리겠습니다. 자바에서는 컬렉션(Collection) 자료구조의...

자바의 메모리 누수 문제를 해결하는 방법은 무엇인가요?

자바의 메모리 누수 문제를 해결하는 방법 --- 1. 메모리 누수란? 자바는 가비지 컬렉션(GC)...

팩토리 패턴을 사용하여 주어진 문제를 해결해보세요.

팩토리 패턴을 사용하여 주어진 문제를 해결해보세요. --- 1. 팩토리 패턴이란? 팩토리 패턴...