int a=2;
int b=2;    
MessageBox.Show(object.Equals(a, b).ToString());
                MessageBox.Show(object.ReferenceEquals(a, b).ToString());
第一个返回true,第二个返回false,这个不是a,b都被装箱了吗?应该都是false才对            string a="2";
string b="2";    
MessageBox.Show(object.Equals(a, b).ToString());
                MessageBox.Show(object.ReferenceEquals(a, b).ToString());
这两个都返回true,难道是字符串驻留的问题?

解决方案 »

  1.   

    object.Equals(a, b)要求得两个参数都是object呀,难道不是装箱?
      

  2.   

    object.Equals(a, b) 确定两个 Object 实例是否相等。
    object.ReferenceEquals(a, b) 确定指定的 Object 实例是否是相同的实例
    这下,你明白为什么int 时候,一个是true,另一个是false了吧。
    一切值类型、引用类型继承自Object。作参数传递的是对象的引用,没有装箱。
    string是引用类型,楼主问的那个问题有人指出过。
    string a="2";
    string b="2"; 在堆中只有一个string的实例,在栈里有两个指向堆实例的引用。
    由于不知道string内部是怎么实现的,我也一直迷惑。
      

  3.   

    ReferenceEquals是Object的静态方法,用于比较两个引用类型的对象是否是对于同一个对象的引用。对于值类型它总是返回false。(因为Box以后的对象总是不同的,hehe)因为 int型为基本数据类型  ,String是引用数据类型