C# 字符串和类都是引用类型,那么为什么比较返回不同的结果呢?
我在比较两个字符串和两个类对象,那么为什么字符串一比较结果为“TRUE”,而对象比较结果为“FALSE”?请解释一下,在这两种情况下,内存位置都发生了什么变化C# 字符串和类都是引用类型,那么为什么比较返回不同的结果呢?,c#,C#,我在比较两个字符串和两个类对象,那么为什么字符串一比较结果为“TRUE”,而对象比较结果为“FALSE”?请解释一下,在这两种情况下,内存位置都发生了什么变化 class Program { public class Person { public string Name { get; set; } } static void Main(string[] args) { string s1 = "xyz";
class Program
{
public class Person
{
public string Name { get; set; }
}
static void Main(string[] args)
{
string s1 = "xyz";
string s2 = "xyz";
bool b = s1 == s2;
Person p1 = new Person();
Person p2 = new Person();
bool x = p1 == p2;
}
}
虽然字符串是引用类型,但定义相等运算符(=和!=)是为了比较字符串对象的值,而不是引用
尽管字符串是引用类型,但定义相等运算符(=和!=)是为了比较字符串对象的值,而不是引用
关于启用“==”运算符的清晰说明。关于启用“==”运算符的清晰说明。简而言之,相等运算符的功能不同。基本上,对于字符串,==运算符将查看每个字符是否匹配,对于一般引用类型,==运算符将查看它们是否具有相同的“指针”。简而言之,相等运算符的功能不同。基本上,对于字符串,==运算符将查看每个字符是否匹配,对于一般引用类型,==运算符将查看它们是否具有相同的“指针”。您需要重载
=
和=如果希望引用类型的默认行为以外的其他行为(即当且仅当实例相同()时返回True
),则为Person
类使用code>运算符:
在您的示例中,当您实例化两个不同的Person
对象时,p1==p2
将返回false。您需要重载=
和=如果希望引用类型的默认行为以外的其他行为(即当且仅当实例相同()时返回True
),则为Person
类使用code>运算符:
在您的示例中,当您实例化两个不同的Person
对象时,p1==p2
将返回false
public class Person
{
public static bool operator ==(Person p1, Person p2)
{
// Insert logic here
}
public static bool operator !=(Person p1, Person p2)
{
// Insert logic here
}
}