7.30 C#学习笔记(拆箱装箱、Equals与==)
·
拆箱与装箱
装箱(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 中所有类的最终基类,因此所有类都继承了 Equals 和 ToString 方法。
值类型与引用类型的比较:
1. 值类型
值类型(如 int、double 等)的比较是基于值的比较。
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更多推荐


所有评论(0)