Equals比较的是指向的对象是否一致,等号比较的是两个对象的值是否 一样,即使指向的是两对不同的对象

解决方案 »

  1.   

    值类型的比较没啥说的,都是比值。
    string类型嘛,==和equals是一样的,我记得编译器翻译的时候==是翻译成equals的,这点和java不同至于其他的引用类型,这个并不是前篇一律的,要看其重载时咋写的,有的是比内容,有的是比是不是相同行的值,有的比特定项
    使用时要先查下msdn,不符合自己的预期要自己重载
      

  2.   


    不是绝对准确,因为Equals是虚函数,具体的类型,包括值类型,可以做出自行判断。
    同样,==是操作符号,具体类也可以重载。至于这个问题:“net提供的类型里面,哪些种类的Equals()和==返回同样的结果,哪些不一样”
    应该说,出于Principle of least astonishmen(惊奇最少)原则。我相信MS的类库中不会出现不一样的例子。
      

  3.   

    Equals:比较两个对象的值是否相等,即比较值
    ==:对于引用对象比较其引用,对于值类型比较其值
    ReferenceEquals:比较两个引用对象所指向的地址是否相同,即比较引用
      

  4.   

    值类型的==也可以重载。static void main()
    {
        A a = new A(){i = 2};
        A b = new A(){i = 1};
        bool equal = a == b; // true
    }struct A
    {
        public int i;
        public static bool operator ==(A a, A b){return a.i == b.i + 1;}
        public static bool operator !=(A a, A b){return a.i != b.i + 1;}
    }
      

  5.   

    参见:http://msdn.microsoft.com/zh-cn/library/7h9bszxx(v=vs.85).aspx