欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

C#提供值類型和引用類型,值類型存儲(chǔ)在棧上,故用==判斷是直接判斷其值是否相等,因?yàn)橹殿愋筒淮嬖诙阎械臄?shù)據(jù),因此值類型的Equals也是判斷數(shù)據(jù)。即,對(duì)于值類型而言,==與Equals相同,均是判斷其值是否相等。

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

"=="操作符:

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

Equals()方法:

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

總結(jié):

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

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

重寫equals方法只要兩個(gè)對(duì)象的字段的值相等就相等不比較對(duì)象的引用地址
沒(méi)重寫前,兩個(gè)對(duì)象雖然字段的值相同,但是為兩個(gè)不同的對(duì)象,引用地址不同,結(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入淺出掌握Unity ShaderLab語(yǔ)法基礎(chǔ)

    深入淺出掌握Unity ShaderLab語(yǔ)法基礎(chǔ)

    Unity中所有Shader文件都通過(guò)一種陳述性語(yǔ)言進(jìn)行描述,稱為“ShaderLab”, 這篇文章主要介紹了Unity圖形學(xué)之ShaderLab入門基礎(chǔ),需要的朋友可以參考下
    2023-05-05
  • C#生成唯一值的方法匯總

    C#生成唯一值的方法匯總

    這篇文章主要介紹了C#生成唯一值的方法匯總,有需要的朋友可以參考一下
    2013-11-11
  • C# FileStream讀寫的文本操作代碼分析

    C# FileStream讀寫的文本操作代碼分析

    這篇文章主要分享了個(gè)人使用C# FileStream實(shí)現(xiàn)的讀寫的文本操作的小程序,主要是復(fù)習(xí)下對(duì)filestream的理解,希望對(duì)大家學(xué)習(xí)C#能夠有所幫助
    2016-07-07
  • C#列表框、復(fù)選列表框、組合框的用法實(shí)例

    C#列表框、復(fù)選列表框、組合框的用法實(shí)例

    這篇文章主要介紹了C#列表框、復(fù)選列表框、組合框的用法,實(shí)例分析了在一個(gè)簡(jiǎn)單存儲(chǔ)項(xiàng)目中列表框、復(fù)選列表框、組合框的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01
  • C# 建造者模式(Builder Pattern)詳細(xì)講解

    C# 建造者模式(Builder Pattern)詳細(xì)講解

    建造者模式是一種創(chuàng)建型設(shè)計(jì)模式,通過(guò)將復(fù)雜對(duì)象的構(gòu)建過(guò)程與其表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示,它適用于構(gòu)建過(guò)程復(fù)雜且涉及多個(gè)步驟的場(chǎng)景,本文介紹C# 建造者模式(Builder Pattern)詳細(xì)講解,感興趣的朋友一起看看吧
    2025-03-03
  • c#接口使用示例分享

    c#接口使用示例分享

    接口與抽象類一樣,也是表示某種規(guī)則,一旦使用了該規(guī)則,就必須實(shí)現(xiàn)相關(guān)的方法。對(duì)于C#語(yǔ)言而言,由于只能繼承自一個(gè)父類,因此若有多個(gè)規(guī)則需要實(shí)現(xiàn),則使用接口是個(gè)比較好的做法
    2014-02-02
  • C#中sizeof的用法實(shí)例分析

    C#中sizeof的用法實(shí)例分析

    這篇文章主要介紹了C#中sizeof的用法,包括了常見(jiàn)的用法及注釋事項(xiàng),需要的朋友可以參考下
    2014-09-09
  • C#實(shí)現(xiàn)記事本查找與替換功能

    C#實(shí)現(xiàn)記事本查找與替換功能

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)記事本查找與替換功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • C#實(shí)現(xiàn)給Word每一頁(yè)設(shè)置不同圖片水印

    C#實(shí)現(xiàn)給Word每一頁(yè)設(shè)置不同圖片水印

    Word中設(shè)置水印時(shí),可加載圖片設(shè)置為水印效果,但通常添加水印效果時(shí),會(huì)對(duì)所有頁(yè)面都設(shè)置成統(tǒng)一效果。本文將利用C#實(shí)現(xiàn)給Word每一頁(yè)設(shè)置不同圖片水印的效果,需要的可以參考一下
    2022-02-02
  • C#跨窗體操作(引用傳遞) 實(shí)例代碼

    C#跨窗體操作(引用傳遞) 實(shí)例代碼

    現(xiàn)在給大家介紹一種最簡(jiǎn)單的跨窗體操作,WinForm的窗體是一個(gè)類,C#的類是引用類型,那么我們應(yīng)該可以將WinForm窗體類進(jìn)行傳遞,那不就可以進(jìn)行操作了么?
    2013-03-03

最新評(píng)論