package cn.itcast.object;
java是面向?qū)ο蟮恼Z言,核心思想:找適合 的對象做適合 的事情:
方式一:自定義類忘苛,然后通過自定義的類創(chuàng)建對象。
方式二:sun提供了很多的類給我使用唱较,我們只需要認識這些類扎唾,我們就可以通過這些類創(chuàng)建對象了。
Object類是所有類的終極父類南缓。 任何一個類都繼承了Object類胸遇。
Object類:
Object類常用的方法:
toString(); 返回該對象的字符串表示。 返回一個字符串用于描述該對象的汉形。
疑問: toString() 有何作用狐榔? 重寫toString之后,我們直接輸出一個對象的時候获雕,就會輸出符合我們所需求的格式數(shù)據(jù)。
equals(Object obj) 用于比較兩個對象的內(nèi)存地址收捣,判斷兩個對象是否為同一個對象届案。
hashCode() 返回該對象的哈希碼值(大家可以把哈希碼就 理解成是對象的內(nèi)存地址)
java中的規(guī)范:一般我們重寫了一個類的equals方法,我們都會重寫它的hashCode方法罢艾。
java是開源....源代碼公開...
查看源代碼的方式:
方式一: 按住ctrl鍵楣颠,單擊你需要看的源代碼.
方式二:把光標移動到你需要查看代碼處按下F3.
為什么我們要查看源代碼:
- 1,查看源代碼可以了解別人是如何寫出這個技術(shù)的咐蚯,讓我們了解的更加的深入童漩。
- 吸收大牛的思想。
看源代碼最忌諱的一點: 不要每行代碼都弄懂是什么意思春锋,能看個大概 猜出他意思就足矣矫膨。
class Person{
int id;
String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
public Person() {
}
/目前我需要直接輸出一個對象的時候,輸出 的格式是: 編號:110 姓名: 狗娃 這種格式。 目前Object的
/toString方法無法滿足子類的需求侧馅,那么這時候我們就應該對Object類的toString進行重寫危尿。
@Override
public String toString() {
return "編號:"+ this.id + " 姓名:"+this.name;
}
/為什么要重寫:Object的equals方法默認比較的是兩個對象的內(nèi)存地址,我目前需要比較的是兩個對象的身份證馁痴,所以Object類的equals方法不符合我現(xiàn)在的需求谊娇。
@Override
public boolean equals(Object obj) {
Person p = (Person)obj;
return this.id== p.id;
}
@Override
public int hashCode() {
return this.id;
}
}
public class Demo1 {
public static void main(String[] args) {
Object o = new Object();
System.out.println(o.toString()); / java.lang.Object@18b3364 返回的字符串表示: 完整類名+@+ 對象的哈希碼
System.out.println(o); / 通過查看源代碼得知,直接輸出一個對象 的時候罗晕,實際上在println方法內(nèi)部會調(diào)用這個 調(diào)用的toString方法济欢,把把toString方法返回的內(nèi)容輸出。
/疑問: 為什么直接輸出一個對象的時候和輸出對象的toString方法返回的字符串結(jié)果是一樣的呢小渊?
Person p1 = new Person(110,"狗娃");
System.out.println("p1:"+p1);
/如果我們能夠輸出一個p對象的時候法褥,輸出的格式: 編號:110 姓名: 狗娃..
Person p2 = new Person(112,"狗剩");
System.out.println("p2:"+p2);
Person p1 = new Person(110,"狗娃");
Person p2 = new Person(110,"陳富貴");
/需求:在現(xiàn)實生活中只要兩個人的身份證一致,那么就是同一個人粤铭。
System.out.println("p1與p2是同一個對象嗎挖胃?"+ p1.equals(p2));
System.out.println("p1哈希碼:"+ p1.hashCode());
System.out.println("p2哈希碼:"+ p2.hashCode());
}
}
注意1:
==比較兩個字符串內(nèi)存地址是否一致
equals比較兩個字符串的內(nèi)容是否一致
小技巧:
不推薦: if(變量.equals("常量"))
推薦: if(常量.equals("變量"))
因為常量永遠不會為空.
變量如果為空就會引起崩潰.因為空對象沒有equals函數(shù).