C# 中 equals( ) 和 == 的區別和用法


 

Equals:


下面的語句中,x、y 和 z 表示不為 null 的對象引用。

* 除涉及浮點型的情況外,x.Equals(x) 都返回 true。

* x.Equals(y) 返回與 y.Equals(x) 相同的值。

* 如果 x 和 y 都為 NaN,則 x.Equals(y) 返回 true。

* 當且僅當 x.Equals(z) 返回 true 時,(x.Equals(y) && y.Equals(z)) 才返回 true。

* 只要不修改 x 和 y 引用的對象,對 x.Equals(y) 的相繼調用將返回相同的值。

* x.Equals(null) 返回 false。

==:

對於預定義的值類型,如果操作數的值相等,則相等運算符 (==) 返回 true,否則返回 false。

對於 string 以外的引用類型,如果兩個操作數引用同一個對象,則 == 返回 true。

對於 string 類型,== 比較字符串的值。

 

Equals與==的區別

"==" : 操作比較的是兩個變量的值是否相等,對於引用型變量表示的是兩個變量在堆中存儲的地址是否相同,即棧中的內容是否相同。

"equals" : 操作表示的兩個變量是否是對同一個對象的引用,即堆中的內容是否相同。 
而字符串是一個特殊的引用型類型,在C#語言中,重載了string 對象的很多方法方法(包括equals

 

總結如下:

1、對於值類型,==和equals等價,都是比較存儲信息的內容。

2、對於引用類型,==比較的是引用類型在棧中的地址,equals方法則比較的是引用類型在托管堆中的存儲信息的內容。

 

 

using System;

namespace EqualsTest
{
    class EqualsTest
    {
        static void Main(string[] args)
        {
            //值類型
            int x = 1;
            int y = 1;
            Console.WriteLine(x == y);//True
            Console.WriteLine(x.Equals(y));//True             

            //引用類型
            A a = new A();
            B b = new B();
            //Console.WriteLine(a==b);//報錯
            Console.WriteLine(a.Equals(b));//False

            //字符串(最像值類型的引用類型)
            string m = "1";
            string n = "1";
            Console.WriteLine(m==n);//True
            Console.WriteLine(m.Equals(n));//True

            //結構體(最像引用類型的值類型)
            T t = new T();
            V v = new V();
            //Console.WriteLine(t == v);//報錯
            Console.WriteLine(t.Equals(v));//True

            Console.Read();

        }
    }

    class A { public int X = 1; }

    class B { public int X = 1; }

    struct T { int X; }

    struct V { int X; }

}
View Code

 

 

原址:https://blog.csdn.net/studyofnet/article/details/16842235

           https://www.cnblogs.com/9cct/p/7749358.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM