C#에서 ==와 equals()의 차이점은 무엇입니까?

高洛峰
풀어 주다: 2016-12-16 10:28:46
원래의
1208명이 탐색했습니다.

예를 들어 다음 코드는

int age = 25;
 
short newAge = 25;
 
Console.WriteLine(age == newAge);  //true
 
Console.WriteLine(newAge.Equals(age)); //false
 
Console.ReadLine();
로그인 후 복사

int와 short가 기본 유형이지만 "=="와 비교하면 true를 반환하고, equals()에서는 false를 반환합니다. 왜?

답변:

요약:

"equals()"는 "=="보다 더 복잡합니다.

구체적으로:

원래 유형은 기본 클래스의 object.Equals(object)를 재정의하고 대괄호 안의 객체가 해당 유형 및 값과 동일한 경우 true를 반환합니다(Nullable 참고) type 위의 판단에도 적합합니다. 비어 있지 않은 Nullable 유형은 항상 기본 유형의 인스턴스에 포함됩니다.

newAge가 짧기 때문에 newAge.Equals(object)는 object가 짧고 값이 newAge 값과 같을 때 true를 반환합니다. 전달하는 것은 int 객체이므로 false를 반환합니다.

이에 비해 "==" 연산자는 두 개의 정수(int) 또는 두 개의 짧은 정수(short) 또는 두 개의 긴 정수(long)를 사용하는 연산으로 정의됩니다. "=="의 두 매개변수가 정수와 짧은 정수인 경우 컴파일러는 암시적으로 short를 int로 변환하고 변환된 int 값의 크기를 비교합니다.

작동시키는 다른 방법:

기본 유형에는 자체적인 equals() 메소드도 있으며, equals는 동일한 유형의 인수를 허용합니다.

age.Equals(newAge)를 작성하면 컴파일러는 int.Equals(int)를 최상의 오버로드 방법으로 선택하고 암시적으로 short를 int로 변환합니다. 그런 다음 이 메서드는 두 int 값의 크기를 직접 비교하기 때문에 true를 반환합니다.

Short에도 short.Equals(short) 메서드가 있지만 int 형식은 암시적으로 short로 변환할 수 없으므로 호출되지 않습니다.

캐스트를 사용하여 이 메서드를 강제로 호출할 수 있습니다.

Console.Writeline(newAge.Equals((short)age)); //true
로그인 후 복사

이렇게 하면 short.Equals(short)가 직접 호출됩니다. 상자 작업을 로드하지 않고. age가 32767보다 크면 오버플로 예외가 발생합니다.

short.Equals(object) 오버로드를 호출할 수도 있지만 동일한 유형의 boxed 객체를 명시적으로 전달해야 합니다.

Console.WriteLine(newAge.Equals((object)(short)age)); // true
로그인 후 복사

이전 선택적 메소드(short.Equals(short))와 마찬가지로 크기가 짧은 범위를 초과하면 오버플로 예외도 발생합니다. 이전 솔루션과 달리 개체가 부족하여 시간과 메모리가 낭비됩니다.

소스 코드:

실제로 사용되는 Equals()는 다음과 같습니다.

public override bool Equals(Object obj) {
 
       if (!(obj is Int16)) {
 
           return false;
 
       }
 
       return m_value == ((Int16)obj).m_value;
 
   }
 
   public bool Equals(Int16 obj)
 
   {
 
       return m_value == obj;
 
   }
로그인 후 복사



C#에서 ==와 equals()의 차이점에 대한 더 많은 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!


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