和 equals 方法的區別

2021-09-05 11:38:46 字數 2237 閱讀 7055

public static void main(string args)
結果:

public static void main(string args)
結果:

結果:

結果:

== 是乙個關係運算子,使用與所有內建的資料型別,同樣也適用於所有物件,檢查兩個物件是否相等。

**1中,a == b 返回true。因為a 、b 都是基本資料型別,基本資料型別都是存在棧裡面的,當jvm執行int a = 10時,首先會建立 int a 的引用,然後去棧裡面找是不是有乙個資料為10,如果有就將a 指向這個位址,如果沒有就建立乙個位址。int b = 10也是相同的道理。所以當a 和 b 值相同的時候,位址也是相同的。

**1中,c == d 返回true。integer c = 10 是int 型別的自動裝箱操作,呼叫了integer的valueof()方法,當c >= -128 並且c <=127時,用了常量池技術,所以c 和 d的位址也是相同的。valueof原始碼如下:

public static integer valueof(int i) 

private static class integercache catch( numberformatexception nfe)

}high = h;

cache = new integer[(high - low) + 1];

int j = low;

for(int k = 0; k < cache.length; k++)

cache[k] = new integer(j++);

// range [-128, 127] must be interned (jls7 5.1.7)

assert integercache.high >= 127;

}private integercache() {}

}

**1中,e == f 返回false。因為e  和 f 大於127 ,進行了new 的操作,e 和 f 的位址是不同的。

equals()方法是object類中的乙個方法,方法中也是用 「==」 來實現的。下面是object類中equals()方法的原始碼:

public boolean equals(object obj)
所以equals()方法比較的也是兩個物件的位址。但是為什麼**2中用equals()方法結果卻是true呢?因為integer類中重寫了equals()方法,方法中把integer進行拆箱操作,對比的是基本資料型別。原始碼如下:

private final int value;

public boolean equals(object obj)

return false;

}

**4中value物件並沒有重寫父類object的equals()方法,所以呼叫的其實是object類中的equals()方法,其實也是用==比較的 所以結果為false;

自反性:對任意引用值x,x.equals(x)的返回值一定為true;

對稱性:對於任意引用值x,y,當且僅當y.equals(x)返回值為true時,x.equals(y)的返回值一定為true;

傳遞性:如果x.equals(y) = true,y.equals(z) = true,則x.equals(z) = true;

一致性:如果參與比較的物件沒有任何改變,則物件比較的結果也不應該有任何改變。

非空性:任何非空的引用值x,x.equals(null)的返回值一定為false。

和equals方法的區別

是乙個運算子,可以用於比較基本資料型別和引用資料型別 用於基本資料型別的時候,比較的是值是否相等,而用於引用資料型別的時候,比較的是位址值。實際使用equals 方法時,一般用於比較內容是否相同。因此,需要重寫equals方法。這裡分為系統類和自定義類進行說明 系統類一般都重寫過equals方法,比...

號和equals方法的區別

是乙個比較運算符號,既可以比較基本資料型別,也可以比較引用資料型別,基本資料型別比較的是值,引用資料型別比較的是位址值 只能比較引用資料型別,所有的物件都會繼承 object 類中的方法,沒有重寫 object 類中的 equals 方法,equals方法和 號比較引用資料型別無區別,重寫後的equ...

hashcode和equals方法的區別與聯絡

hashcode 比較的是兩個物件在hash表中的位置 1.equal 相等的兩個物件他們的hashcode 肯定相等,也就是用equal 對比是絕對可靠的。2.hashcode 相等的兩個物件他們的equal 不一定相等,也就是hashcode 不是絕對可靠的。hashcode的存在主要是為了查詢...