C#中判断对象是否是同一个实例

C#如下,怎么判断对象cc与jeffry 、 tom是不是同一个对象?


    class Student
    {
        public int Id { get; set; }
        public string Name { get; set;}

    }
    internal class Program
    {
        static void Main(string[] args)
        {
            Queue<Student> queue = new Queue<Student>();


            var tom = new Student() { Id = 1, Name = "Tom" };
            var jeffry = new Student() { Id = 2, Name = "Jeffry" };

            queue.Enqueue(tom);
            queue.Enqueue(jeffry);

            var cc = queue.Peek();

            Console.WriteLine("cc is jeffry: " + cc.Equals(jeffry));
            Console.WriteLine("cc is tom: " + cc.Equals(tom));
            Console.ReadLine();
        }
    }

输出结果:
image


在C#中判断对象是否是同一个实例(即引用相同),可用通过下面三种方式实现:

1. 使用 ReferenceEquals 方法(推荐)

bool isSameAsTom = object.ReferenceEquals(cc, tom);    // true(因为cc是tom的引用)
bool isSameAsJeffry = object.ReferenceEquals(cc, jeffry); // false

2. 使用 == 运算符

bool isSameAsTom = (cc == tom);     // true
bool isSameAsJeffry = (cc == jeffry); // false

3. 使用 Equals 方法(需注意重写行为)

bool isSameAsTom = cc.Equals(tom);    // true(默认比较引用)
bool isSameAsJeffry = cc.Equals(jeffry); // false

在您的代码中验证:

var cc = queue.Peek(); // 这里cc实际指向tom(第一个入队的对象)

Console.WriteLine(object.ReferenceEquals(cc, tom));    // 输出 True
Console.WriteLine(object.ReferenceEquals(cc, jeffry)); // 输出 False
Console.WriteLine(cc == tom);     // 输出 True
Console.WriteLine(cc == jeffry);  // 输出 False

关键说明:

  1. Peek() 的行为
    queue.Peek() 返回队列中第一个元素(最早入队的对象),这里是 tom,所以 cctom 是同一个引用。

  2. 引用比较 vs 值比较

    • 上述方法比较的是内存地址(是否同一个实例)
    • 如果重写了 Equals()== 运算符,结果可能不同(但您的 Studnet 类未重写)
  3. 类名拼写修正建议
    Studnet 改为 Student 避免混淆:

    class Student  // 修正拼写
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    

最终结论:

在您的代码中,cctom 是同一个对象,与 jeffry 不是同一个对象。

posted @ 2025-07-17 20:43  青云Zeo  阅读(31)  评论(0)    收藏  举报