標籤:src ret obj open 注意 shc 字典 通過 快捷
Object:是所有類的根類。所有的類都直接或者間接的繼承自該類
1
建立學生對象列印學生對象的地址值(本質上是將地址通過雜湊演算法算出的雜湊值)
同一個對象的雜湊值肯定是一樣的。
雜湊值相同的對象的地址值未必一樣。
新華字典,zhu -- 456(雜湊值) -- 豬(第三個),朱(第5個),珠(第9個)
2
為什麼重寫toString()方法
預設情況下,列印的是對象的字串表示,意義不大。
包名...類名[email protected]+該對象的雜湊值的十六進位
所以,我們建議,所有子類重寫該方法。
自動產生即可。
表示該對象的資料:
[類名 成員變數1=資料值1,成員變數2=資料值2,...]
1 class Student{ 2 //姓名和年齡 3 private String name; 4 private int age; 5 //自動產生的快速鍵shift+alt+s 6 public String getName() { 7 return name; 8 } 9 public void setName(String name) {10 this.name = name;11 }12 public int getAge() {13 return age;14 }15 public void setAge(int age) {16 this.age = age;17 }18 public Student(String name, int age) {19 super();20 this.name = name;21 this.age = age;22 }23 public Student() {24 super();25 }26 //重寫Object類中的toString方法,自動產生即可27 28 public String toString() {29 return "Student [name=" + name + ", age=" + age + "]";30 }31 32 }33 34 35 public class StudentDemo {36 public static void main(String[] args) {37 //建立學生對象,並列印學生對象38 Student s1 = new Student("林志玲", 50);39 Student s2 = new Student("劉德華", 55);40 41 //列印兩個學生對象42 System.out.println(s1);//[email protected]43 System.out.println(s2);//[email protected]44 /**45 * [email protected],我們之前稱他為地址值其實是不夠準確的,46 * 因為當時為了讓大家好理解,我們就暫且稱他為地址值。47 * 注意:他其實說白了是一個對象的字串表示形式--格式:包名+類名[email protected]+該對象的雜湊碼值48 * 49 * 什麼是雜湊嗎值呢?50 * 有一種雜湊演算法,可以將對象的雜湊嗎值算出來,同一個對象的雜湊嗎值是一樣的,51 * 但是記住,雜湊嗎值一樣不代表就是同一個對象52 * 53 * 舉例:新華字典54 * zhu 465頁(雜湊嗎值) 豬 (第1個) 住(第四個) 祝(第六個)55 */56 }重寫toString()方法
運行結果如下:
Student [name=林志玲, age=50]
Student [name=劉德華, age=55]
3
equals():
預設情況下,比較的是地址值。沒有意義。
所以,建議子類重寫該方法。
自動產生即可。
這個產生的方法作用是比較對象的成員變數值是否相同。
1 class Student2{ 2 private String name; 3 private int age; 4 public Student2(String name, int age) { 5 super(); 6 this.name = name; 7 this.age = age; 8 } 9 public Student2() {10 super();11 // TODO Auto-generated constructor stub12 }13 public String getName() {14 return name;15 }16 public void setName(String name) {17 this.name = name;18 }19 public int getAge() {20 return age;21 }22 public void setAge(int age) {23 this.age = age;24 }25 26 public int hashCode() {27 final int prime = 31;28 int result = 1;29 result = prime * result + age;30 result = prime * result + ((name == null) ? 0 : name.hashCode());31 return result;32 }33 34 //equals()方法在這裡比較的是對象的成員變數值,當一個對象和另一個對象的成員變數值完全相同的時候,equals()35 //就可以認為這兩個對象時同一個對象36 37 public boolean equals(Object obj) {38 if (this == obj)39 return true;40 if (obj == null)41 return false;42 if (getClass() != obj.getClass())43 return false;44 Student2 other = (Student2) obj;45 if (age != other.age)46 return false;47 if (name == null) {48 if (other.name != null)49 return false;50 } else if (!name.equals(other.name))51 return false;52 return true;53 }54 }55 56 57 public class ObjectDemo {58 public static void main(String[] args) {59 //建立兩個學生對象60 Student2 s1 = new Student2();61 Student2 s2 = new Student2();62 //equals()方法是Object類中的方法,預設比較的是對象的地址值63 System.out.println(s1.equals(s2));64 System.out.println(s1==s2);// ==完全就可以比較地址值65 66 //建立兩個學生對象67 Student2 s3 = new Student2("劉德華", 55);68 Student2 s4 = new Student2("劉德華", 55);69 System.out.println(s3.equals(s4));70 71 }equals()方法示範
運行結果如下:
true
false
true
Java學習:Object類