关于装箱拆箱的一点疑问解决办法
关于装箱拆箱的一点疑问
各位高手,小弟有一事不明。这是小弟写的代码
int i = 56;
object z = i; //装箱
object m = i; //装箱
Console.WriteLine("{0},{1},{2}", i, z, m);
Console.WriteLine(object.Equals(z, m));
Console.ReadKey();
为什么 Console.WriteLine(object.Equals(z, m));这句代码返回的是true。装箱不就是新创建一个object类型,然后把值赋值给这个引用类型,他们两个指向地址都不一样为什么相等?
------解决方案--------------------
小白太多。
我还是详细说说:
各位高手,小弟有一事不明。这是小弟写的代码
int i = 56;
object z = i; //装箱
object m = i; //装箱
Console.WriteLine("{0},{1},{2}", i, z, m);
Console.WriteLine(object.Equals(z, m));
Console.ReadKey();
为什么 Console.WriteLine(object.Equals(z, m));这句代码返回的是true。装箱不就是新创建一个object类型,然后把值赋值给这个引用类型,他们两个指向地址都不一样为什么相等?
------解决方案--------------------
小白太多。
我还是详细说说:
- C# code
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { User u1 = new User() { ID = 1, Name = "A" }; User u2 = new User() { ID = 2, Name = "B" }; Console.WriteLine(object.ReferenceEquals(u1, u2)); Console.WriteLine(u1 == u2); Console.WriteLine(object.Equals(u1, u2)); Console.WriteLine(u1.Equals(u2)); } } class User { public int ID { get; set; } public string Name { get; set; } public override bool Equals(object obj) { return true; } } }
------解决方案--------------------
装箱和拆箱的本质并不是把值类型变成引用类型.
而是用一个引用类型的对象把值类型包装一下,真正到了使用的地方还是要拆箱的.
就是说,两个箱子,里面是一样的东西.你使用的时候是用的里面的东西,根本不会感觉到箱子的存在.但确实是两个箱子.