Java中 和equals的區別和聯絡

2021-07-30 10:24:43 字數 2087 閱讀 9102

一 概念簡介

1 ==和equals比較運算子:==要求兩個引用變數指向同一物件時才返回true,equals方法則允許使用者提供自定義的相等規則。

2 object類提供的equals方法判斷兩個物件相等的標準與==完全相同。因此開發者通常需要重寫equals方法。

二 ==號比較應用

1 **示例

public class equaltest

}

2 執行結果

65和65.0f是否相等?true

65和'a'是否相等?true

str1和str2是否相等?false

str1是否equals str2?true

3 結果分析

如果兩個變數是基本型別變數,且都是數值型別(不一定要求資料型別嚴格相同),則只要兩個變數的值相等,就將返回true。

如果是兩個引用型別變數,只有它們指向對一物件時,==判斷才會返回true。

三 字串的==號比較

1 **示例

public class stringcomparetest

}

2 執行結果

true

true

false

false

3 結果分析

jvm常量池保證相同的字串直接量只有乙個,不會產生多個副本,例子中s1,s4,s5所引用的字串可以在編譯期確定下來,因此它們都引用常量池中的同一字串物件。

使用new string()建立的字串是在執行時建立出來的,它儲存在執行時記憶體區,不會放入常量池中。

四 equals方法錯誤應用

1 **示例

class person

}// 定義乙個dog空類

class dog{}

public class overrideequalserror

}

2 執行結果

person物件是否equals dog物件?true

person物件是否equals string物件?true

3 結果分析

造成這種荒唐結果的原困是重寫person類的equais方法時沒有任何判斷,無條件返回true。

五 equals方法正確應用

1 **示例

class person

public person(string name , string idstr)

// 此處省略name和idstr的setter和getter方法。

// name的setter和getter方法

public void setname(string name)

public string getname()

// idstr的setter和getter方法

public void setidstr(string idstr)

public string getidstr()

// 重寫equals()方法,提供自定義的相等標準

public boolean equals(object obj)

}return false; }}

public class overrideequalsright

}

2 執行結果

p1和p2是否相等?true

p2和p3是否相等?false

3 結果分析

通常而言,正確重寫equals方法應滿足:自反性,對稱性,傳遞性,一致性,對於任何不是null的x,x.equals(null)一定返回faise。

java中 和 equals區別

是比較2個物件是否相等,物件包括基本型別的變數和引用型別變數 object類是所有類的父類 並且 equals是其中的方法 所以說 和equals 本質上都是一樣的 object 類中的equals 方法是 public boolean equals object o return this o 其...

Java中 和equals 的區別

1.用於比較引用資料型別和比較基本資料型別時具有不同的功能 比較基本資料型別,如果兩個值相同,則結果為true。eg package demo public class demo boolean compare int x int y else return false 這段 返回false。而在比...

Java中 和equals的區別

我們在寫程式的過程中,判斷會將兩個物件進行對比。比如拿字串來說吧!string hello hello string greeting hello string str new string hello system.out.println hello.equals greeting hello.e...