和Equal 的區別

2022-02-23 05:28:46 字數 2191 閱讀 5426

我們在程式設計的時候,經常會遇到判斷兩個物件是否相等的情況。說到判斷兩個物件是否相等,就不得不說物件的型別和物件在記憶體中的儲存情況。

物件型別可以分為值型別和引用型別:

值型別包括:簡單型別、結構型別、列舉型別

引用型別包括:類、代表、陣列、介面。

值型別是直接儲存在記憶體的棧上的,引用型別在儲存的時候有點特殊,會有乙個物件引用和物件的值,物件的值存在堆上,物件引用也即物件值在堆上的位址存在棧上,

至於堆和棧在這裡就不細說了。

先上**:

#region 源**

string str1 = "

test";

string str2 = "

test";

console.writeline(str1 ==str2);

console.writeline(str1.equals(str2));

console.writeline(

"*********");

object o1 =str1;

object o2 =str2;

console.writeline(o1 ==o2);

console.writeline(o1.equals(o2));

console.writeline(

"*********");

string str3 = new

string(new

char );

string str4 = new

string(new

char );

console.writeline(str3 ==str4);

console.writeline(str3.equals(str4));

console.writeline(

"*********");

object ob1 =str3;

object ob2 =str4;

console.writeline(ob1 ==ob2);

console.writeline(ob1.equals(ob2));

console.writeline(

"*********");

person p1 = new person("

xiaosy");

person p2 = new person("

xiaosy");

console.writeline(p1 ==p2);

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

console.writeline(

"*********");

person p3 = new person("

xiaosy");

person p4 =p3;

console.writeline(p3 ==p4);

console.writeline(p3.equals(p4));

console.writeline(

"*********");

console.readkey();

#endregion

view code

執行結果:

==對於值型別的比較,就是直接比較內容是否一樣,如果內容一樣直接返回true,如果內容不一樣則返回false;而對於引用型別的比較,比較的則是兩個變數的儲存位址,即在棧裡的內容是否一致。

equal()比較的是兩個物件是否是同乙個物件引用,即堆中的內容是否相同。

而字串是乙個特殊的引用型別,因此,在上面的例子中,字串str3和str4比較是相等的。因為object ob1和object ob2在記憶體中是兩個不同的物件,所以儲存的位址不同,故不相等。而equals比較的是兩個物件儲存位址對應的記憶體空間裡的內容,故相等。

而object o1和object o2相等,因為系統並沒有為s2分配記憶體,只是將「test"指向了s2.所以s1和s2指向的是同乙個字串。

對於p1和p2,也是記憶體中兩個不同的物件,所以在記憶體中的位址肯定不相同,故p1==p2會返回false;又因為p1和p2是對不同物件的引用,所以呼叫equals方法也會返回false。

對於p3和p4,由於p4=p3,p3將物件的引用賦給了p4,p3和p4指向同一位址,是對同乙個物件的引用,所以兩個比較都返回true。

和 equal 的區別

public class equaltest 執行結果為 t1 t2 false t1 t2 t3 true t3 t4 true i1.equals i2 false i3.equals i1 i2 true i3.equals i4 true st1 st2 false st1 st2 st3 ...

equal和「 」的區別

對於基本資料型別,判斷兩個變數的值是否相等。equal 不能用於基本資料型別。只能用於類變數。對於基本資料型別要用其包裝類。因為物件變數的儲存的是物件在記憶體中的路徑,即記憶體位址。所以用 比較時,即使物件的值相等,但是他們的記憶體位址不同,所以 的結果為false。故 用於比較兩個變數的值是否相等...

equal和「 」的區別

因為物件變數的儲存的是物件在記憶體中的路徑,即記憶體位址。所以用 比較時,即使物件的值相等,但是他們的記憶體位址不同,所以 的結果為false。故 用於比較兩個變數的值是否相等,而不是變數引用的物件是否相等。equal用於比較兩個物件是否相同型別,值是否相等。總之 比較的是值 變數 棧 記憶體中存放...