Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 == 연산자와 .Equals() 메서드의 차이점 이해하기

C# 프로그래밍에서 문자열을 비교할 때 == 연산자Equals() 메서드 두 가지 방법을 사용할 수 있습니다. 하지만 이 둘은 내부적으로 동작하는 방식이 다르며, 상황에 따라 결과가 달라질 수 있습니다.

Equals() 메서드는 오직 문자열의 내용(content)만 비교하는 반면, == 연산자는 객체의 참조 동일성(reference identity)을 기준으로 비교합니다. 즉, 두 변수가 같은 메모리 위치를 가리키는지를 확인합니다.

예제 1: 동일한 참조를 가진 문자열 비교

using System;
namespace ComparisionExample {
    class Program {
        static void Main(string[] args) {
            string str = "hello";
            string str2 = str;
            Console.WriteLine("Using Equality operator: {0}", str == str2);
            Console.WriteLine("Using equals() method: {0}", str.Equals(str2));
            Console.ReadKey();
        }
    }
}

출력 결과

Using Equality operator: True
Using equals() method: True

위 예제에서 str2str과 동일한 참조를 공유하므로, == 연산자와 Equals() 메서드 모두 True를 반환합니다. 참조가 같으면 내용도 자연스럽게 같기 때문입니다.

예제 2: 서로 다른 참조를 가진 문자열 비교

이번에는 참조가 다른 경우를 살펴보겠습니다.

using System;
namespace Demo {
    class Program {
        static void Main(string[] args) {
            object str = "hello";
            char[] values = {'h','e','l','l','o'};
            object str2 = new string(values);
            Console.WriteLine("Using Equality operator: {0}", str == str2);
            Console.WriteLine("Using equals() method: {0}", str.Equals(str2));
            Console.ReadKey();
        }
    }
}

출력 결과

Using Equality operator: False
Using equals() method: True

이 예제의 결과는 흥미롭습니다. strstr2는 모두 "hello"라는 동일한 내용을 가지고 있지만, str2new string()으로 새로 생성된 별개의 객체이기 때문에 참조가 다릅니다.

따라서 == 연산자는 참조가 다르다는 이유로 False를 반환하고, Equals() 메서드는 내용이 동일하므로 True를 반환합니다.

정리

  • == 연산자: 변수의 타입이 object일 때는 참조 동일성(메모리 주소)을 비교합니다. 단, 양쪽 모두 string 타입으로 선언된 경우에는 내용을 비교합니다.
  • Equals() 메서드: 항상 문자열의 실제 내용을 비교합니다.

따라서 문자열의 내용 자체를 비교하는 것이 목적이라면, 타입과 무관하게 일관된 결과를 보장하는 Equals() 메서드를 사용하는 것이 더 안전한 선택입니다.