和equals的區別

2021-09-12 21:53:23 字數 2269 閱讀 2123

system.out.

println(1

==1);

// true

system.out.

println

("a"

=="a");

// true

integer x =

newinteger(1

);integer y =

newinteger(1

);system.out.

println

(x == y)

;// false

在object類中定義了乙個equals的方法,這個方法的初始預設行為是比較物件的記憶體位址值,一般來說,意義不大。所以,在一些類庫當中這個方法被重寫了,如string、integer、date。在這些類當中equals有其自身的實現(一般都是用來比較物件的成員變數值是否相同),而不再是比較類在堆記憶體中的存放位址了。

對於復合資料型別之間進行equals比較,在沒有複寫equals方法的情況下,他們之間的比較還是記憶體中的存放位置的位址值,跟雙等號(==)的結果相同;如果被複寫,按照複寫的要求來。

integer x =

newinteger(1

);integer y =

newinteger(1

);system.out.

println

(x.equals

(y))

;// true

string s1 =

newstring

("hello");

string s2 =

newstring

("hello");

system.out.

println

(s1.

equals

(s2));

// true

equals方法必須滿足自反性對稱性傳遞性一致性與 null 比較必須返回false

自反性

x.

equals

(x);

// true

對稱性

x.

equals

(y)== y.

equals

(x);

// true

傳遞性

if

(x.equals

(y)&& y.

equals

(z))

x.equals

(z);

// true;

一致性

當x和y引用的物件資訊沒有被修改時,多次呼叫應該得到同樣的返回值

x.

equals

(y)== x.

equals

(y);

// true

與null比較

對任何不是 null 的物件 x 呼叫 x.equals(null) 結果都為 false

x.

equals

(null)

;// false;

string s1 =

"s";

string s2 =

newstring

("s");

string s3 = s2;

system.out.

println

(s1 == s2)

;// false

system.out.

println

(s1 == s3)

;// false

system.out.

println

(s2 == s3)

;// true

system.out.

println

(s1.

equals

(s2));

// true

system.out.

println

(s1.

equals

(s3));

// true

system.out.

println

(s2.

equals

(s3));

// true

Equals 和 的區別

對於值型別,如果物件的值相等,則相等運算子 返回 true,否則返回 false。對於string 以外的引用型別,如果兩個物件引用同乙個物件,則 返回 true。對於 string 型別,比較字串的值。操作比較的是兩個變數的值是否相等。equals 方法比較的是兩個物件的內容是否一致 equals...

equals 和 的區別

equals 方法 是string類從它的超類object中繼承的 被用來檢測兩個物件是否相等,即兩個物件的內容是否相等。用於比較引用 和 比較基本資料型別時具有不同的功能 1.比較基本資料型別,如果兩個值相同,則結果為true 2.而在比較引用時,如果引用指向記憶體中的同一物件,結果為true s...

和equals的區別

和 equals 的區別 1.是乙個運算子。2.equals則是string物件的方法,可以.點 出來。我們比較無非就是這兩種 1 基本資料型別比較 2 引用物件比較 1 基本資料型別比較 和equals都比較兩個值是否相等。相等為true 否則為false 2 引用物件比較 和equals都是比較...