读书人

关于装箱拆箱的一点疑问解决办法

发布时间: 2012-04-18 15:01:59 作者: rapoo

关于装箱拆箱的一点疑问
各位高手,小弟有一事不明。这是小弟写的代码
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;        }    }}
[解决办法]
装箱和拆箱的本质并不是把值类型变成引用类型.
而是用一个引用类型的对象把值类型包装一下,真正到了使用的地方还是要拆箱的.
就是说,两个箱子,里面是一样的东西.你使用的时候是用的里面的东西,根本不会感觉到箱子的存在.但确实是两个箱子.

读书人网 >C#

热点推荐