Object:全部類的根類。
Object是不斷抽取而來,具有着全部對象都具有的共性內容。
html
class Person{ private int age ; Person(int age){ this.age = age; } } class Demo{ } class ObjectDemo{ public static void main(String[] args){ Person p1 = new Person(20); Person p2 = new Person(20); Person p3 = p1; Demo d = new Demo(); System. out.println(p1 == p2);//false System. out.println(p1.equals(p2));//false System. out.println(p1.equals(p3));//true System. out.println(p1.equals(d));//false } }運行結果:
false
false
true
false
java
上面都是比較內存地址,而沒有比較年齡,然而須要比較年齡則須要重寫equals方法~this
P.S.
==以及Object類的equals方法默認都是根據對象的哈希值判斷兩個對象是否相等。
能夠經過覆蓋Object的equals方法來重寫比較規則。
spa
class Person{ private int age ; Person( int age){ this.age = age; } //比較Person的年齡,是不是同齡人 //通常都會覆蓋此方法,根據對象的特有內容,創建判斷對象是否相同的依據。 public boolean equals(Object obj){ if(!(obj instanceof Person)) throw new ClassCastException("類型錯誤"); Person p = (Person)obj; return this .age == p.age; } } class ObjectDemo{ public static void main(String[] args){ Person p1 = new Person(20); Person p2 = new Person(20); System. out.println(p1.equals(p2)); } }運行結果:
ture
htm
class Person{ private int age ; Person(int age){ this.age = age; } public int hashCode(){ return age ; } } class ObjectDemo{ public static void main(String[] args){ Person p1 = new Person(20); System. out.println(p1); System. out.println(p1.getClass().getName() + " $ " + Integer.toHexString(p1.hashCode())); } }運行結果:
Person@21對象
Person $ 21
繼承
System. out.println(p1.getClass().getName() + " $ " + Integer.toHexString(p1.hashCode()));爲了方便初學者理解上面的代碼,接下來分別對其中用到的方法進行解釋,具體以下:
1.getClass().getName()表明返回對象所屬類的類名,便是Person。內存
2.hashCode()表明返回該對象的哈希值。 (也能夠把哈希碼理解成是對象的內存地址)字符串
3.Integer.toHexString(p1.hashCode())表明將對象哈希值用16進製表現。get
其中,hashCode()是Object類中定義的一個方法,這個方法將對象的內存地址進行哈西運算,返回一個int型的哈希值
toString() : 返回該對象的字符串表示,返回一個字符串用於描述該對象的。 (返回的字符串表示: 完整類名+@+ 對象的哈希碼)
交流企鵝:654249738,和自學者交流羣:517284938