C Equals 和運算子 的區別

2021-06-13 04:57:19 字數 1777 閱讀 4545

1.對於值型別

如果物件的值相等,則相等運算子==返回true,否則返回false

2.對於引用型別

equals方法比較的是兩個物件指向的記憶體空間內容是不是相同。也就是比較兩個引用型別是否是對同乙個物件的引用,即兩個物件的內容是否相等。

對於string型別,==比較字串的值

對於引用型別,==操作符類似於比較的是資料夾的路徑是否相同,而equals方法比較的是資料夾中的內容是不是一樣。

using system;

namespace equals和等號的區別

public string name

get }}

class program

);string s4 = new string(new char );

console.writeline(s3 == s4);//true

console.writeline(s3.equals(s4));//true

object o3 = s3;

object o4 = s4;

console.writeline(o3 == o4);//false

console.writeline(o3.equals(o4));//true

classperson p1 = new classperson("ltp");

classperson p2 = new classperson("ltp");

console.writeline(p1 == p2);//false

console.writeline(p1.equals(p2));//false

classperson p3 = new classperson("ltp");

classperson p4 = p3;

console.writeline(p3 == p4);//true

console.writeline(p3.equals(p4));//true}}

}

因為值型別是儲存在記憶體中的堆疊(以下簡稱棧),而引用型別的變數在棧中僅僅是儲存引用型別變數的位址,而其本身則儲存在堆中。

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

equals操作表示的是兩個變數是否是對同乙個物件的引用,即堆中的內容是否相同。

1、棧區(stack)―   由

編譯器自動分配釋放

,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。

2、堆區(heap) ― 一般由

程式設計師分配釋放

, 若程式設計師不釋放,程式結束時可能由os** 。注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶。

堆和棧的區別可以用如下的比喻來看出: 

使用棧就象我們去飯館裡吃飯,只管點菜(發出申請)、付錢、和吃(使用),吃飽了就走,不必理會切菜、洗菜等準備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自由度小。

使用堆就象是自己動手做喜歡吃的菜餚,比較麻煩,但是比較符合自己的口味,而且自由度大。

運算子 和 的區別

和 在邏輯運算子中都是用於連線兩個boolean表示式,兩邊都為true則整體為true,兩邊只要有一邊為false則輸出false,區別在於 具有短路功能,即當第乙個boolean表示式為false時,就不往下判斷第二個表示式,而 在第乙個表示式為false的情況下,仍會去判斷第二個表示式的真假。...

c Equals和 的區別

值型別是儲存在記憶體中的堆疊 以後簡稱棧 而引用型別的變數在棧中僅僅是儲存引用型別變數的位址,而其本身則儲存在堆中。操作比較的是兩個變數的值是否相等,對於引用型變數表示的是兩個變數在堆中儲存的位址是否相同,即棧中的內容是否相同。equals操作表示的兩個變數是否是對同乙個物件的引用,即堆中的內容是否...

位運算子和邏輯運算子的區別

一 邏輯運算子和位運算 1 位運算子 按位 與 規則 全一則一,否則為零 清零 按位 或 規則 全零則零,否則為一 按位 非 規則 類似於取反碼 按位 異或 敲黑板 規則 相同為零,不同為一 注釋 這裡講一下位運算子運作交換的語句 異或 x x y y x y x x y 宣告變數不寫了 親測 2 ...