10 為什麼會有Object類? ==與equals()的區別?
阿新 • • 發佈:2019-02-09
為什麼會有Object類?
Object類正如我們人類的祖先一樣,所有的類都繼承於Object類。
祖先是開源時代,那個時候祖先還只有一些最基本的能力。
像人類會有基本能力一樣,比如說吃飯,睡覺這些功能。
那麼Object類有什麼呢?
toString, equals, getClass, hashCode, notify,notifyAll, wait, finalize, clone
所以我們看一下祖先Object類中的equals方法。在多型中,多型最大的用處就是引數的傳遞,而這個引數越大越好,最大的是什麼呢?當然就是祖先Object類了。
public boolean equals(Object obj) { return (this == obj); //注意:equals()方法裡就是== }
equals方法的起源就是==
如何表現人與人之前是不同的,用程式碼實現一下:
package com.junc.test; public class EqualsMethod { public static void main(String[] args) { Person me = new Person(); Person other = new Person(); boolean i = me.equals(other); //我是不是跟他一樣 System.out.println(i); //輸出 false } } class Person extends Object{ //extends Object可以省去,因為預設繼承祖先Object } class Object { public boolean equals(Object obj) {//相當於Object obj = new Person(); return (this == obj); } }
既然是繼承祖先,那麼子類Person就繼承Object裡的方法equals()。
傳入引數就相當於 Object obj = new Person();
因為我與別人是不同的人,所以輸出false。
隨著不斷的變化,我們給equals()賦予新的意義,那就是比較屬性,例如比較姓名或性別這些屬性。比如很多人叫張三,也有可能不同,這個怎麼去比較呢?
package com.junc.test; public class EqualsMethod { public static void main(String[] args) { Person me = new Person("張三", "男"); Person other = new Person("張三", "女"); boolean i = me.equals(other); System.out.println(i); //輸出為true } } class Person { private String name; private String sex; public Person(String name, String sex) { super(); this.name = name; this.sex = sex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public boolean equals(Object obj) { //重寫了Object類中的equals()方法 Person p = (Person) obj; return this.name.equals(p.name); //比較兩人姓名,返回true } }
==與equals()的區別 :
==是比較運算子,它即可以比較值,也可以比較物件地址。
equals()是方法,如果不重寫Object類中的equals()方法,那麼它等同於==,即this == obj,如果重寫,則equals()方法通常比較的是物件的屬性。