亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#的==運算符和Equals()方法區別

2023-05-05 19:01:40
字體:
來源:轉載
供稿:網友

本文使用一個實例具體講解了C#中“==”與Equals()方法的區別.

using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
 class Person
 {
    private string name;
    public string Name
    {
      get { return name; }
      set { name = value; }
    }
    public Person(string name)
    {
      this.name = name;
    }
 }
 class Program
 {
  static void Main(string[] args)
  {
    string a = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
    string b = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
    Console.WriteLine(a == b);
    Console.WriteLine(a.Equals(b));
    object g = a;
    object h = b;
    Console.WriteLine(g == h);
    Console.WriteLine(g.Equals(h));
    Person p1 = new Person("jia");
    Person p2 = new Person("jia");
    Console.WriteLine(p1 == p2);
    Console.WriteLine(p1.Equals(p2));
    Person p3 = new Person("jia");
    Person p4 = p3;
    Console.WriteLine(p3 == p4);
    Console.WriteLine(p3.Equals(p4));
    Console.ReadLine();
  }
 }
}

答案為何為true true false true false false true true

因為值類型是存儲在內存中的堆棧(以后簡稱棧),而引用類型的變量在棧中僅僅是存 儲引用類型變量的地址,而其本身則存儲在堆中。

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

"equals" : 操作表示的兩個變量是否是對同一個對象的引用,即堆中的內容是否相同。

而字符串是一個特殊的引用型類型,在C#語 言中,重載了string 對象的很多方法方法(包括equals()方法),使string對象用起來就像是值類型一樣。

因此在上面的例子中,第一對輸出 ,字符串a和字符串b的兩個比較是相等的。

對于 第二對輸出 object g = a 和object h = b , 在內存中兩個不同的對象,所以在棧中的內容是不相同的,故不相等。而g.equals(h)用的是sting的equals()方法故相等(多太)。如果 將字符串a和b作這樣的修改:

string a="aa";
  string b="aa";

則,g和h的兩個比較都是相等的。這是因為系統并沒有給字符串b分配內存,只是將"aa"指向了b。所以a和b指向的是同一個字符串(字符串在 這種賦值的情況下做了內存的優化)。

對于p1和p2,也是內存中兩個不同的對象,所以在內存中的地址肯定不相同,故p1==p2會返回false,又因為p1和p2又是對不同對象 的引用,所以p1.equals(p2)將返回false。

對于p3和p4,p4=p3,p3將對對象的引用賦給了p4,p3和p4是對同一個對象的引用,所以兩個比較都返回true。

MSDN中就有介紹?。?/p>

下面的規則概括了 Equals 方法和等號運算符 (==) 的實現準則:

每次實現 Equals 方法時都實現 GetHashCode 方法。這可以使 Equals 和 GetHashCode 保持同步。

每次實現相等運算符 (==) 時,都重寫 Equals 方法,使它們執行同樣的操作。這樣,使用 Equals 方法的基礎結構代碼(如 Hashtable 和 ArrayList)的行為就與用相等運算符編寫的用戶代碼相同。

每次實現 IComparable 時都要重寫 Equals 方法。

實現 IComparable 時,應考慮實現相等 (==)、不相等 (!=)、小于 ( <) 和大于 (>) 運算符的運算符重載。

不要在 Equals、GetHashCode 方法或相等運算符 (==) 中引發異常。

有關 Equals 方法的相關信息,請參見實現 Equals 方法。

在值類型中實現相等運算符 (==)

大多數編程語言中都沒有用于值類型的默認相等運算符 (==) 實現。因此,只要相等有意義就應該重載相等運算符 (==)。

應考慮在值類型中實現 Equals 方法,這是因為 System..::.ValueType 的默認實現和自定義實現都不會執行。

每次重寫 Equals 方法時都實現相等運算符 (==)。

在引用類型中實現相等運算符 (==)

大多數語言確實為引用類型提供默認的相等運算符 (==) 實現。因此,在引用類型中實現相等運算符 (==) 時應小心。大多數引用類型(即使是實現 Equals 方法的引用類型)都不應重寫相等運算符 (==)。

如果類型是 Point、String、BigNumber 等基類型,則應重寫相等運算符 (==)。每當考慮重載加法 (+) 和減法 (-) 運算符時,也應該考慮重載相等運算符 (==)。

好了,下面是考題,相信答案大家都知道了。

Console.WriteLine((2 + 2) == 4);
  object s = 1;
  object t = 1;
  Console.WriteLine(s == t);
  string a = "hello";
  string b = String.Copy(a);
  string c = "hello";
  Console.WriteLine(a == b);
  Console.WriteLine((object)a == (object)b);
  Console.WriteLine((object)a == (object)c);

答案:TRUE, FALSE, TRUE, FALSE, TRUE

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产www精品| 亚洲片在线观看| 欧美午夜精品在线| 亚洲国产精品成人va在线观看| 日韩av在线网| 国产精自产拍久久久久久蜜| 欧美成人精品激情在线观看| 精品国产精品三级精品av网址| 亚洲精品短视频| 成人免费视频在线观看超级碰| 中文字幕精品久久| 国产www精品| 国产精品美女无圣光视频| 欧美激情免费观看| 国产精品视频26uuu| 亚洲精品中文字幕女同| 国产97免费视| 国产99久久久欧美黑人| 中文字幕日韩精品在线观看| 在线观看成人黄色| 欧美日韩综合视频网址| 国产精品女人网站| 亚洲护士老师的毛茸茸最新章节| 亚洲自拍偷拍在线| 亚洲国产成人av在线| 亚洲a在线播放| 久久久这里只有精品视频| 韩国福利视频一区| 欧美大奶子在线| 亚洲精品一区在线观看香蕉| 欧美激情欧美激情| 国产精品夫妻激情| wwwwwwww亚洲| 在线观看精品自拍私拍| 成人av色在线观看| 亚洲а∨天堂久久精品喷水| 国产日韩欧美一二三区| 亚洲国产精品一区二区久| 青青久久aⅴ北条麻妃| 午夜精品一区二区三区视频免费看| www.久久色.com| 国产精品一区久久久| 成人av电影天堂| 亚洲欧洲一区二区三区在线观看| 亚洲女人被黑人巨大进入| 久久精品中文字幕电影| 色偷偷av一区二区三区乱| 国产精品久久久91| 日韩国产欧美精品一区二区三区| 亚洲伊人一本大道中文字幕| 亚洲国产成人精品久久| 欧美日韩综合视频| 国内成人精品一区| 日韩h在线观看| 97精品在线视频| 日本精品视频在线播放| 成人综合网网址| 国产精品jvid在线观看蜜臀| 91久久精品国产91久久| 久久精品亚洲一区| 国产日韩欧美在线观看| 国产精品视频导航| 日韩av在线免费观看一区| 亚洲福利小视频| 国产不卡一区二区在线播放| 亚洲精品少妇网址| 成人av电影天堂| 永久免费精品影视网站| 日韩高清av一区二区三区| 精品爽片免费看久久| 亚洲精品aⅴ中文字幕乱码| 久久久成人的性感天堂| 国产精品久久久久福利| 亚洲午夜久久久久久久| 国产午夜精品免费一区二区三区| 欧美午夜电影在线| 日韩视频中文字幕| 亚洲人成在线观看网站高清| 精品久久久久久久久久ntr影视| 97在线视频免费看| 日韩精品视频免费专区在线播放| 中文字幕av一区中文字幕天堂| 欧美国产极速在线| 欧美午夜视频在线观看| 免费97视频在线精品国自产拍| 日韩黄色av网站| 久久久久久久久久久网站| 欧美中文字幕第一页| 日韩成人在线电影网| 欧美激情在线视频二区| 国产欧美一区二区白浆黑人| 欧美电影在线观看完整版| 欧美日韩在线观看视频小说| 在线免费看av不卡| 亚洲第一偷拍网| 欧美国产日韩一区二区在线观看| 亚洲欧美制服第一页| 国产主播欧美精品| 国产视频丨精品|在线观看| 亚洲永久免费观看| 国内精品模特av私拍在线观看| 国内免费久久久久久久久久久| 日韩经典一区二区三区| 亚洲激情在线观看视频免费| 成人欧美在线观看| 日韩二区三区在线| 欧美精品videossex88| 亚洲欧美自拍一区| 亚洲天堂日韩电影| 亚洲天堂2020| 欧美成人精品在线播放| 国语自产精品视频在线看抢先版图片| 一区二区三区亚洲| 欧美中文在线观看国产| 自拍偷拍亚洲区| 91精品久久久久久久久久| 中文字幕亚洲欧美| 亚洲加勒比久久88色综合| 性色av一区二区三区免费| 2019国产精品自在线拍国产不卡| 亚洲天堂久久av| 久久久久久97| 亚洲欧美综合精品久久成人| 欧美视频在线看| 911国产网站尤物在线观看| 久久久视频免费观看| 国产精自产拍久久久久久蜜| 亚洲日本成人女熟在线观看| 久久影院资源网| 久久99热这里只有精品国产| 亚洲精品资源美女情侣酒店| 国产欧美韩国高清| 中文字幕在线成人| 亚洲激情自拍图| 欧美老女人bb| 久热99视频在线观看| 91精品久久久久久久久久久久久| 成人国产精品一区| 日韩av电影手机在线| 亚洲肉体裸体xxxx137| 毛片精品免费在线观看| 国产亚洲aⅴaaaaaa毛片| 91在线精品播放| 亚洲欧美日韩国产精品| 国产精品精品视频| 91在线视频导航| 91美女片黄在线观| 亚洲激情第一页| 在线观看精品国产视频| 国产精品一香蕉国产线看观看| 欧美亚洲视频一区二区| 国产欧美一区二区| 日韩欧美主播在线| 久久伊人精品天天| 日韩有码在线播放| 亚洲剧情一区二区| 亚洲自拍欧美色图| 福利微拍一区二区| 国产精品91在线| 色99之美女主播在线视频| 亚洲欧洲日本专区| 精品一区二区电影| 欧美激情精品久久久久久黑人| 成人欧美一区二区三区在线湿哒哒|