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 ...