>백엔드 개발 >C#.Net 튜토리얼 >C#에서 같음과 ==의 차이점은 무엇입니까?

C#에서 같음과 ==의 차이점은 무엇입니까?

高洛峰
高洛峰원래의
2016-12-16 10:30:261707검색

C#에는 참조 평등과 값 평등이라는 두 가지 유형의 평등이 있습니다.


◎가치 평등은 일반적으로 이해되는 의미에서의 평등입니다. 이는 두 개체가 동일한 값을 포함한다는 의미입니다.
◎참조 동일성은 비교 대상이 두 개체가 아니라 두 개체 참조이며 둘 다 동일한 개체를 참조한다는 의미입니다.

같음:


다음 문에서 x, y 및 z는 null이 아닌 개체 참조를 나타냅니다.

* x.Equals(x)는 부동 소수점 유형이 관련된 경우를 제외하고 true를 반환합니다.
* x.Equals(y)는 y.Equals(x)와 동일한 값을 반환합니다.
* x.Equals(y)는 x와 y가 모두 NaN인 경우 true를 반환합니다.
* (x.Equals(y) && y.Equals(z))는 x.Equals(z)가 true를 반환하는 경우에만 true를 반환합니다.
* x.Equals(y)에 대한 연속 호출은 x 및 y에서 참조하는 객체가 수정되지 않는 한 동일한 값을 반환합니다.
* x.Equals(null)은 false를 반환합니다.

==:


미리 정의된 값 유형의 경우 항등 연산자(==)는 피연산자의 값이 같으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

문자열이 아닌 참조 유형의 경우 ==는 두 피연산자가 모두 동일한 객체를 참조하면 true를 반환합니다.
문자열 유형의 경우 ==는 문자열 값을 비교합니다.

Equals와 ==

"=="의 차이: 두 변수의 값이 같은지 비교하는 연산입니다. 참조 변수의 경우 두 변수가 같은지 여부를 의미합니다. 변수가 힙에 있는지 여부, 즉 스택의 내용이 동일한지 여부입니다.

"equals": 연산이 나타내는 두 변수가 동일한 객체를 참조하는지, 즉 힙의 내용이 동일한지 여부입니다.
문자열은 특수 참조 유형입니다. C# 언어에서는 문자열 객체의 많은 메소드(equals() 메소드 포함)가 오버로드되어 문자열 객체가 값 유형처럼 사용됩니다.
인스턴스

C# 코드

using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 
namespace ConsoleApplication1
 {
     class Person
     {
         private string name;
         public string Name
         {
             get { return name; }
             set { name = value; }
         }
         public Person(string name)
         {
             this.name = name;
         }
     }
     class program
     {
         static void Main(string[] args)
         {
             string a = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
             string b = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
             Console.WriteLine(a == b);
             Console.WriteLine(a.Equals(b));
             object g = a;
             object h = b;
             Console.WriteLine(g == h);
             Console.WriteLine(g.Equals(h));
             Person p1 = new Person("jia");
             Person p2 = new Person("jia");
             Console.WriteLine(p1 == p2);
             Console.WriteLine(p1.Equals(p2));
             Person p3 = new Person("jia");
             Person p4 = p3;
             Console.WriteLine(p3 == p4);
             Console.WriteLine(p3.Equals(p4));
             Console.ReadLine();
         }
     }
 }

출력 결과

true, true, false, true, false, false, 사실이야, 사실이야.

요약은 다음과 같습니다.


1. 값 유형의 경우 ==와 같음은 동일하며 둘 다 저장된 정보의 내용을 비교합니다.
2. 참조 유형의 경우 ==는 스택에 있는 참조 유형의 주소를 비교하고, equals 메소드는 관리되는 힙에 있는 참조 유형의 저장 정보 내용을 비교합니다.
3. 문자열 클래스는 내부적으로 == 메소드를 이미 처리한 클래스이므로 ==와 ==는 동일하며 둘 다 저장된 정보의 내용을 비교합니다.
4. 일부 사용자 정의 클래스의 경우 equals 메서드를 오버로드해야 합니다. 그렇지 않으면 기본 클래스의 equals 메서드가 기본값이 됩니다(기본 클래스가 Equals 메서드를 오버로드하지 않으면 Object 클래스의 Equals 메서드가 됩니다) ) 비교. 관리되는 힙에 정보를 저장하는 참조 유형이 아닌 주소에 대해서도 마찬가지입니다.


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


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.