Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字符串和类都是引用类型,那么为什么比较返回不同的结果呢?_C# - Fatal编程技术网

C# 字符串和类都是引用类型,那么为什么比较返回不同的结果呢?

C# 字符串和类都是引用类型,那么为什么比较返回不同的结果呢?,c#,C#,我在比较两个字符串和两个类对象,那么为什么字符串一比较结果为“TRUE”,而对象比较结果为“FALSE”?请解释一下,在这两种情况下,内存位置都发生了什么变化 class Program { public class Person { public string Name { get; set; } } static void Main(string[] args) { string s1 = "xyz";

我在比较两个字符串和两个类对象,那么为什么字符串一比较结果为“TRUE”,而对象比较结果为“FALSE”?请解释一下,在这两种情况下,内存位置都发生了什么变化

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
    }
}