==,equal,RefenceEqual区别

对于值类型,==和Equal操作的作用是一样的,就是比较值类型的值是否相等。如果使用object.ReferenceEquals来比较值类型,输出永远都是FALSE,因为他们BOX之后在堆上的引用都不是同一个值。

对于引用类型来说,==,Equal,ReferenceEqual都是对引用对象是否相等的比较,而不是他们的值,除非重写函数进行值比较。

 

对于字符串这种特殊的值类型来说,==和Equal操作的作用是一样的,就是比较值类型的值是否相等。如果使用object.ReferenceEquals来比较值类型,就要看字符串是否是新实化的,否则字符串池的机制会使得对象的引用相等。

            string x =new String(new char[]{'a'});
            string y = "a";
            string z = "a";
            Console.WriteLine(x.Equals(y));//ture
            Console.WriteLine(object.ReferenceEquals(x,y));//false
            Console.WriteLine(object.ReferenceEquals(z, y));//true


 

原文地址:https://www.cnblogs.com/leestar54/p/3013208.html