最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c#?==操作符和equals方法的使用區(qū)別

 更新時間:2024年01月12日 11:00:46   作者:彭小彭~  
在C#中,==操作符和Equals()方法有著不同的用途和行為,本文就來介紹一下c#?==操作符和equals方法的使用區(qū)別,具有一定的參考價值,感興趣的可以了解一下

在C#中,"=="操作符和Equals()方法有著不同的用途和行為。

==操作符判斷的是堆棧中的值,Equlas判斷的是堆中的值。

C#提供值類型和引用類型,值類型存儲在棧上,故用==判斷是直接判斷其值是否相等,因為值類型不存在堆中的數(shù)據(jù),因此值類型的Equals也是判斷數(shù)據(jù)。即,對于值類型而言,==與Equals相同,均是判斷其值是否相等。

對于引用類型而言,其棧中存儲的是對象的地址,那么==就是比較兩個地址是否相等,即是否指向同一個對象;Equals函數(shù)則是比較兩個對象在堆中的數(shù)據(jù)是否一樣,即兩個引用類型是否是對同一個對象的引用。

"=="操作符:

  • "“操作符用于比較兩個對象的值是否相等。當(dāng)使用”"操作符比較兩個引用類型的對象時,它會比較它們的引用是否指向相同的內(nèi)存地址。
  • 對于值類型(如int、double等),"=="操作符比較它們的實際值。如果值相等,則返回true,否則返回false。

Equals()方法:

  • Equals()方法是一個虛擬方法,定義在System.Object類中,因此所有的類都可以使用它。
  • 在默認(rèn)情況下,Equals()方法的行為與"=="操作符相同,即它用于比較兩個對象的值是否相等。
  • 但是,類可以重寫Equals()方法以改變其行為。重寫Equals()方法通常用于自定義類來定義自定義的相等性比較規(guī)則。

總結(jié):

  • "=="操作符用于比較引用類型的對象的引用或值類型的實際值。
  • Equals()方法用于比較對象的值是否相等,且可以被重寫以自定義相等性比較規(guī)則。

因此,一般情況下,對于引用類型,應(yīng)該使用"=="操作符來比較對象的引用,而對于值類型或者自定義類,應(yīng)該使用Equals()方法來比較它們的值。

重寫equals方法只要兩個對象的字段的值相等就相等不比較對象的引用地址
沒重寫前,兩個對象雖然字段的值相同,但是為兩個不同的對象,引用地址不同,結(jié)果為不相等。

public class stu{
public int id;
public string name;
}
internal class Program
{
    private static void Main(string[] args)
    {
        Console.WriteLine("c#equals和==的區(qū)別");
        // int c = 1;s
        stu a = new stu() 
        { 
        id = 1,
         name = "pzx" 
         };
        stu b = new stu()
        {
            id = 1,
            name = "pzx"
        };
        if (a.Equals(b))
        {
            Console.WriteLine("a等于b");
        }
        else
        {
            Console.WriteLine("a不等于b");
        }
    }
}

重寫后(值判斷,不比較引用地址)輸出相等

 internal class stu
 {
     public int id;
     public string name;

     /// <summary>
     /// 重寫equal方法
     /// </summary>
     /// <param name="stu"></param>
     /// <returns></returns>
     public override bool Equals(object? obj)
     {
         if (obj == null) return false;
         stu stu1 = (stu)obj;

         Type type = obj.GetType();
         var property = type.GetFields();
         foreach (var prop in property)
         {
             if (prop.GetValue(this).Equals(prop.GetValue(stu1)))
             {
                 return true;
             }
         }
         return false;
     }
 }

到此這篇關(guān)于c# ==操作符和equals方法的使用區(qū)別的文章就介紹到這了,更多相關(guān)c# ==操作符和equals方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

达日县| 游戏| 营口市| 吉水县| 海宁市| 南皮县| 汤阴县| 台湾省| 即墨市| 尼玛县| 龙岩市| 沈阳市| 长乐市| 三台县| 富蕴县| 江源县| 时尚| 台中县| 邮箱| 大余县| 朔州市| 临安市| 白山市| 峡江县| 新河县| 永靖县| 容城县| 紫金县| 郎溪县| 辽中县| 百色市| 济宁市| 庐江县| 历史| 内乡县| 中阳县| 永川市| 瓦房店市| 甘肃省| 新兴县| 高清|