C#기초: Equals()와 연산자==의 차이점 분석
equals () 방법은 두 대상의 내용이 일치하는지 비교하는 것입니다. equals는 인용 유형이 같은 대상에 대한 인용인지 비교하는 것입니다.값 유형에 대한 비교는 여기서 설명하지 않겠습니다. 다음은 인용 유형에 대한 비교입니다.
일단 저희가 프로그램을 한번 볼게요.
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;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
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,true,true입니다.
왜 이 답이 나왔을까요?값 유형은 메모리에 저장된 창고(이후 창고라고 약칭)이기 때문에 인용 유형의 변수는 창고에 인용 유형의 변수의 주소만 저장하고 그 자체는 창고에 저장한다.
== 작업은 두 변수의 값이 같은지, 인용형 변수는 두 변수가 더미에 저장된 주소가 같은지, 즉 창고의 내용이 같은지를 비교한다.
equals 조작은 두 변수가 같은 대상에 대한 인용인지, 즉 무더기의 내용이 같은지 여부를 나타낸다.
문자열은 특수한 인용형 유형으로 C# 언어에서string 대상을 다시 불러오는 많은 방법(equals() 방법 포함)을 사용하여string 대상을 마치 값 유형처럼 사용할 수 있다.
따라서 위의 예에서 문자열 a와 문자열 b의 두 비교는 같다.
object g와 object h의 메모리에 있는 두 개의 다른 대상은 창고의 내용이 같지 않기 때문에 같지 않습니다.g.equals(h)는 sting의 equals() 방법을 사용하기 때문에 같다(너무 많다).문자열 a와 b를 이렇게 수정하는 경우
string a="aa";
string b="aa";
g와 h의 두 비교는 모두 같다.이것은 시스템이 문자열 b에 메모리를 분배하지 않았기 때문에 'aa' 를 b로 가리켰기 때문이다.그래서 a와 b는 같은 문자열을 가리킨다.
p1과 p2는 메모리에 있는 두 개의 다른 대상이기 때문에 메모리에 있는 주소가 틀림없이 같지 않기 때문에 p1==p2는false로 되돌아갈 것이다. 또한 p1과 p2는 서로 다른 대상에 대한 인용이기 때문에 p1이다.equals(p2)는false를 반환합니다.
p3과 p4, p4=p3에 대해 p3은 대상에 대한 인용을 p4에 부여했고 p3과 p4는 같은 대상에 대한 인용이기 때문에 두 비교 모두true로 되돌아간다.
만약 우리가 person의 equals 방법을 다시 쓴다면:
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;
}
public override bool Equals(object obj)
{
if (!(obj is Person))
return false;
Person per = (Person)obj;
return this.Name == per.Name;
}
}
}
그럼equals(p2),true로 돌아갑니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.