> 백엔드 개발 > C#.Net 튜토리얼 > C#의 ==, Equals 및 ReferenceEquals 간의 차이점에 대한 자세한 설명

C#의 ==, Equals 및 ReferenceEquals 간의 차이점에 대한 자세한 설명

黄舟
풀어 주다: 2016-12-14 17:41:48
원래의
1407명이 탐색했습니다.

이 기사 소개:

Equals, ==, C# ReferenceEquals는 두 개체의 개체가 동일한지 여부를 확인하는 데 사용할 수 있습니다. 동일한 기본 값 유형에 대해 ReferenceEquals()는 두 개체의 참조가 동일한지 확인하므로 == 및 Equals()의 비교 결과는 동일합니다. 값 유형의 경우 각 판단 전에 박싱 작업을 수행해야 하기 때문에, 즉 매번 임시 개체가 생성되므로 항상 false가 반환됩니다.

1. == 연산자

1. 기존 !=에 해당하는 정적 동등 기호입니다. 이 기호는 두 개체가 같음을 비교하는 데 사용할 수 있습니다.

2. 필요에 따라 자동으로 필요한 유형 변환을 수행하고 두 개체의 값이 같은지 여부에 따라 true 또는 false를 반환합니다.

3. 참조 객체의 경우 해당 참조를 비교합니다(문자열 참조 유형을 제외하고 문자열은 비교 값입니다).

4 값 유형의 경우 해당 값을 비교합니다. ​

5. 일부 내장 참조 유형은 == 기호를 오버로드합니다. 예를 들어 문자열은 ==를 오버로드하므로 비교 대상은 두 문자열의 참조가 아니라 두 문자열 리터럴이 동일한지 여부입니다.

6. 예:

int i = 5;
int j = 5;
Console.WriteLine(i == j);//值类型比较代数值 输出True
  
int m = 6;
double n = 6.0;
Console.WriteLine(m == n);//类型自动转换并比较数值 输出True 
  
object obj1 = new object();
object obj2 = new object();
Console.WriteLine(obj2==obj1);//引用类型比较引用 输出False
로그인 후 복사

2. 같음

1. 두 개체의 참조가 동일한지 비교합니다.

2. 단, 값 유형의 경우 유형이 동일하고(자동 유형 변환이 수행되지 않음) 값이 동일할 경우(구조체의 각 멤버에 대해 동일해야 함) ), Equals가 반환됩니다. true, 그렇지 않으면 false를 반환합니다.

3. 참조 유형의 경우 기본 동작은 ReferenceEquals와 동일합니다. 두 객체가 동일한 참조를 가리키는 경우에만 True가 반환됩니다.

4. 필요에 따라 Equals를 오버로드할 수 있습니다.

5. 예시

int i = 5;
int j = 5;
Console.WriteLine(i.Equals(j));//值类型比较 输出True
  
int m = 6;
double n = 6.0;
Console.WriteLine(m.Equals(n));//类型不会自动转换并比较数值 输出False
  
object obj1 = new object();
object obj2 = new object();
Console.WriteLine(obj2.Equals(obj1));//引用类型比较 输出False
Console.WriteLine(obj2.Equals(string.Empty));//输出False,比较量对象的类型不同直接返回False
로그인 후 복사

3개, ReferenceEquals

1. Object의 정적 메서드는 두 개체의 참조가 동일한지 비교합니다.


2. 이 메서드는 상속된 클래스에서 재정의될 수 없습니다. 프로토타입은 다음과 같습니다. public static bool ReferenceEquals(object objA, object objB);FCL이 구현되었습니다. 참조자가 가리키는 메모리 주소가 같은지 비교하는 것입니다.


3. 두 가지 값 유형의 경우 ReferenceEquals(object a,object)는 항상 false입니다. b) 메소드 이후에는 값 유형이 새로운 참조 유형 인스턴스로 리박스화되며 당연히 참조 동등성은 없습니다.


4. 두 가지 참조 유형에 대해 ReferenceEquals는 동일한 주소를 가리키는지 여부를 비교합니다.


5. 예시


int i = 5;
 int j = 5;
 Console.WriteLine(object.ReferenceEquals(i, j));//输出False
 
 int m = 6;
 double n = 6.0;
 Console.WriteLine(object.ReferenceEquals(m, n));//输出False
 
 object obj1 = new object();
 object obj2 = new object();
 Console.WriteLine(object.ReferenceEquals(obj1, obj2));//输出False
로그인 후 복사

위는 ==, Equals, ReferenceEquals의 차이점입니다. 모두에게 도움이 되길 바랍니다. 더 많은 관련 글을 보시려면 PHP 중국어 홈페이지(www.php.cn)를 주목해주세요!


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿