第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

小白求助,請問在c# 中的Equals()和==有什么區(qū)別?

小白求助,請問在c# 中的Equals()和==有什么區(qū)別?

蠱毒傳說 2021-05-18 18:14:17
這兩個(gè)分別是比較什么的?請舉個(gè)例子!
查看完整描述

2 回答

?
慕斯王

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊

c#中 ==與equals有什么區(qū)別

對于值類型、引用類型來說比較過程怎樣的?

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

因?yàn)橹殿愋褪谴鎯?chǔ)在內(nèi)存中的堆棧(以后簡稱棧),而引用類型的變量在棧中僅僅是存儲(chǔ)引用類型變量的地址,而其本身則存儲(chǔ)在堆中。
"==" : 操作比較的是兩個(gè)變量的值是否相等,對于引用型變量表示的是兩個(gè)變量在堆中存儲(chǔ)的地址是否相同,即棧中的內(nèi)容是否相同。
"equals" : 操作表示的兩個(gè)變量是否是對同一個(gè)對象的引用,即堆中的內(nèi)容是否相同。
而字符串是一個(gè)特殊的引用型類型,在C#語言中,重載了string 對象的很多方法方法(包括equals()方法),使string對象用起來就像是值類型一樣。
因此在上面的例子中,第一對輸出 ,字符串a(chǎn)和字符串b的兩個(gè)比較是相等的。
對于 第二對輸出 object g = a 和object h = b , 在內(nèi)存中兩個(gè)不同的對象,所以在棧中的內(nèi)容是不相同的,故不相等。而g.equals(h)用的是sting的equals()方法故相等(多太)。如果將字符串a(chǎn)和b作這樣的修改:
string a="aa";
string b="aa";
則,g和h的兩個(gè)比較都是相等的。這是因?yàn)橄到y(tǒng)并沒有給字符串b分配內(nèi)存,只是將"aa"指向了b。所以a和b指向的是同一個(gè)字符串(字符串在這種賦值的情況下做了內(nèi)存的優(yōu)化)。
對于p1和p2,也是內(nèi)存中兩個(gè)不同的對象,所以在內(nèi)存中的地址肯定不相同,故p1==p2會(huì)返回false,又因?yàn)閜1和p2又是對不同對象的引用,所以p1.equals(p2)將返回false。
對于p3和p4,p4=p3,p3將對對象的引用賦給了p4,p3和p4是對同一個(gè)對象的引用,所以兩個(gè)比較都返回true。

MSDN中就有介紹?。?br/>下面的規(guī)則概括了 Equals 方法和等號運(yùn)算符 (==) 的實(shí)現(xiàn)準(zhǔn)則:

每次實(shí)現(xiàn) Equals 方法時(shí)都實(shí)現(xiàn) GetHashCode 方法。這可以使 Equals 和 GetHashCode 保持同步。

每次實(shí)現(xiàn)相等運(yùn)算符 (==) 時(shí),都重寫 Equals 方法,使它們執(zhí)行同樣的操作。這樣,使用 Equals 方法的基礎(chǔ)結(jié)構(gòu)代碼(如 Hashtable 和 ArrayList)的行為就與用相等運(yùn)算符編寫的用戶代碼相同。

每次實(shí)現(xiàn) IComparable 時(shí)都要重寫 Equals 方法。

實(shí)現(xiàn) IComparable 時(shí),應(yīng)考慮實(shí)現(xiàn)相等 (==)、不相等 (!=)、小于 ( <) 和大于 (>) 運(yùn)算符的運(yùn)算符重載。

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

有關(guān) Equals 方法的相關(guān)信息,請參見實(shí)現(xiàn) Equals 方法。

在值類型中實(shí)現(xiàn)相等運(yùn)算符 (==)
大多數(shù)編程語言中都沒有用于值類型的默認(rèn)相等運(yùn)算符 (==) 實(shí)現(xiàn)。因此,只要相等有意義就應(yīng)該重載相等運(yùn)算符 (==)。

應(yīng)考慮在值類型中實(shí)現(xiàn) Equals 方法,這是因?yàn)?System..::.ValueType 的默認(rèn)實(shí)現(xiàn)和自定義實(shí)現(xiàn)都不會(huì)執(zhí)行。

每次重寫 Equals 方法時(shí)都實(shí)現(xiàn)相等運(yùn)算符 (==)。

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

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

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

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



查看完整回答
反對 回復(fù) 2021-05-23
?
動(dòng)漫人物

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊

操作符“==”在值類型情況下表示是否值相等.
equals 判斷是否是同一個(gè)對象的引用.
string的==和equals都是比較值。
static void Main(string[] args)
{
StringBuilder c = new StringBuilder("AAA");
StringBuilder d = new StringBuilder("AAA");
Console.WriteLine(c==d); //false
Console.WriteLine(c.Equals(d));//true
}



查看完整回答
反對 回復(fù) 2021-05-23
  • 2 回答
  • 0 關(guān)注
  • 380 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號