CSharp的4种相等判断形式

      C#语言中,对于变量相等的判断有4中形式,2个静态的object类的方法:ReferenceEquals(obj1,boj2)和Equals(obj1,obj2),还有实例方法Equals(),以及重载运算符号==。

      (1)ReferenceEquals,看名字就知道比较的是2个变量的引用类型,所以很显然2个值类型永远都会返回false,就算是值类型变量自身相比,也返回false(涉及到装箱);

      (2)静态Equals,反编译dll可以看到Equals方法实际调用的是第一个变量的实例方法Equals,所以它的返回值取决于变量类型的Equals方法。

      (3)实例Equals方法,默认比较的是“引用相等”。不过对于System.ValueType重写了此方法,所以值类型不再按“引用相等”来比较。对于值类型,最好重写Equals方法;System.String类也重写了Equals,所以2个字符串内容相同将返回True.

      (4)重载运算符==,同实例方法Equals,默认比较的也是“引用相等”,但ValueType和String也分别做了重写。

     在console项目中测试如下:

 static void Main(string[] args)
        {
            int i = 1;
            int j = 1;

            myData md1 = new myData("aaa");
            myData md2 = new myData("bbb");
            myData md3 = md1;

            //test referenceEquals
            Console.WriteLine(object.ReferenceEquals(i, j));
            Console.WriteLine(object.ReferenceEquals(i, i));
            Console.WriteLine(object.ReferenceEquals(md1, md2));
            Console.WriteLine(object.ReferenceEquals(md1, md3));

            //test static Equals
            Console.WriteLine(object.Equals(i, j));
            Console.WriteLine(object.Equals(md1, md2));
            Console.WriteLine(object.Equals(md1, md3));

            //test Equals
            Console.WriteLine(i.Equals(j));
            Console.WriteLine(md1.Equals(md3));

            //test ==
            Console.WriteLine(i == j);
            Console.WriteLine(md1 == md3);
        }

 public class myData
    {
        string _str = string.Empty;

        public myData(string str)
        {
            _str = str;
        }
    }

运行结果如下:

转载于:https://www.cnblogs.com/JasonCrab/archive/2009/06/23/1508766.html

猜你喜欢

转载自blog.csdn.net/weixin_34404393/article/details/94278729
今日推荐