Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 == 연산자와 equals() 메서드의 차이를 구별하는 프로그램

이 글에서는 Java에서 == 연산자equals() 메서드가 어떻게 다른지 이해하고, 두 방식을 구별하여 문자열을 비교하는 프로그램을 살펴보겠습니다.

== 연산자와 equals() 메서드의 차이

==(동등) 연산자는 두 피연산자의 값이 같은지 여부를 검사합니다. 값이 같으면 조건식은 true가 됩니다. 다만 String 객체에 적용할 경우 == 연산자는 내용이 아닌 참조(메모리 주소)를 비교한다는 점에 주의해야 합니다.

반면 equals() 메서드는 현재 문자열과 지정된 객체를 비교합니다. 인수가 null이 아니고, 현재 객체와 동일한 문자 시퀀스를 담고 있는 String 객체인 경우에만 true를 반환합니다. 즉, equals()는 객체의 실제 내용을 기준으로 비교를 수행합니다.

예시 입출력

입력값이 다음과 같다고 가정해 보겠습니다 −

첫 번째 문자열 : abcde
두 번째 문자열 : 12345

기대되는 출력 결과는 다음과 같습니다 −

== 연산자로 두 문자열 비교: false
equals()로 두 문자열 비교: false

알고리즘

1단계 – 시작
2단계 – input_string_1, input_string_2라는 두 개의 문자열과 result_1, result_2라는 두 개의 boolean 변수를 선언합니다.
3단계 – 값을 정의합니다.
4단계 – == 연산자로 두 문자열을 비교한 뒤 그 결과를 result_1에 저장합니다.
5단계 – equals() 메서드로 두 문자열을 비교한 뒤 그 결과를 result_2에 저장합니다.
6단계 – 결과를 출력합니다.
7단계 – 종료

예제 1: main 메서드에서 직접 구현

아래 예제에서는 모든 연산을 'main' 함수 안에서 한 번에 처리합니다.

public class compare {
   public static void main(String[] args) {
      String input_string_1 = new String("abcde");
      System.out.println("첫 번째 문자열: " +input_string_1);
      String input_string_2 = new String("12345");
      System.out.println("두 번째 문자열: " +input_string_2);
      boolean result_1 = (input_string_1 == input_string_2);
      System.out.println("\n== 연산자로 두 문자열 비교: " + result_1);
      boolean result_2 = input_string_1.equals(input_string_2);
      System.out.println("equals()로 두 문자열 비교: " + result_2);
   }
}

실행 결과

첫 번째 문자열: abcde
두 번째 문자열: 12345

== 연산자로 두 문자열 비교: false
equals()로 두 문자열 비교: false

예제 2: 객체 지향 방식으로 구현

아래 예제에서는 비교 연산을 별도의 함수로 캡슐화하여 객체 지향 프로그래밍 스타일로 구현합니다.

public class Demo {
   static void compare(String input_string_1, String input_string_2){
      boolean result_1 = (input_string_1 == input_string_2);
      System.out.println("\n== 연산자로 두 문자열 비교: " + result_1);
      boolean result_2 = input_string_1.equals(input_string_2);
      System.out.println("equals()로 두 문자열 비교: " + result_2);
   }
   public static void main(String[] args) {
      String input_string_1 = new String("abcde");
      System.out.println("첫 번째 문자열: " +input_string_1);
      String input_string_2 = new String("12345");
      System.out.println("두 번째 문자열: " +input_string_2);
      compare(input_string_1, input_string_2);
   }
}

실행 결과

첫 번째 문자열: abcde
두 번째 문자열: 12345

== 연산자로 두 문자열 비교: false
equals()로 두 문자열 비교: false

핵심 정리

위 예제에서는 new 키워드로 서로 다른 String 객체를 생성했기 때문에 두 문자열의 참조가 달라 == 연산자는 false를 반환합니다. 만약 문자열 리터럴 방식(예: String s = "abcde")으로 동일한 값을 할당했다면 Java의 문자열 풀(string pool) 덕분에 == 연산자도 true를 반환할 수 있습니다.

따라서 문자열의 내용을 비교할 때는 반드시 equals() 메서드를 사용하고, 참조(객체의 동일성)를 확인할 때만 == 연산자를 사용하는 것이 좋습니다.