拆箱与装箱

装箱(Boxing):将值类型转换为 object 类型接口类型的过程。

int a = 1;  
object b = a;  // 装箱:值类型 → object  

拆箱(Unboxing):将 object 类型接口类型显式转换回原始值类型的过程。

object c = 1;  
int d = (int)c;  // 拆箱:object → 值类型  

Equals与==

Equals 方法和 ToString 方法一样,都位于 Object 基类中。Object 类是 .NET 中所有类的最终基类,因此所有类都继承了 EqualsToString 方法。

值类型与引用类型的比较:

1. 值类型

值类型(如 intdouble 等)的比较是基于值的比较。

int a = 1;
int b = 2;
Console.WriteLine(a == b); // 输出:False
Console.WriteLine(a.Equals(b)); // 输出:False

2. 引用类型

引用类型(如自定义类等)的比较默认是基于引用的比较,即比较内存地址。

如果想要比较对象与对象之间的数据  说过重载运算符自己写比较逻辑  使用Equals 重写。

重写Equals:

internal class Class1
{
    public int Age { get; set; }
    public string Name { get; set; }

    public Class1(int age, string name)
    {
        Age = age;
        Name = name;
    }

    //重写
    public override bool Equals(object obj)
    {
        Class1 c = obj as Class1;
        //在这this就指向调用此方法的数据(对象)
        if (this.Age == c.Age && this.Name == c.Name)
        {
            return true;
        }
        return false;
    }
}
//重点在于类
Class1 c1 = new Class1(18, "张三");
Class1 c2 = new Class1(18, "张三");
Console.WriteLine(c1 == c2); //false 比较的是地址
Console.WriteLine(c1.Equals(c2)); // true   重写了Equals,比较的是数据

3.字符串(string)类型

在C#中,string类型使用==运算符时比较的是数据,而不是内存地址。

string str1 = "123";
string str2 = "123";
Console.WriteLine(str1 == str2); // 输出:True
Console.WriteLine(str1.Equals(str2)); // 输出:True
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐