您好,登錄后才能下訂單哦!
我們知道,Object類是所有類的父類,因此也被稱為根類、祖先。那么,我們就來看一看Object類的最常用的兩個方法是如何用的。
1.toString方法:
Object類的toString()方法默認(rèn)返回的是對象地址值,如果某個類的toString()方法返回的不是對象地址值,則說明這個類重寫了toString()方法。
public class Test5 { public static void main(String[] args) { Person p1=new Person(); System.out.println(p1.toString()); //沒有重寫toString()方法,返回的是對象的地址值 cn.itcast.Person@3feba861 } }
接下來我們重寫Person的toString()方法
public class Person { private String name; private int age; //重寫toString()方法 @Override public String toString() { return "姓名: "+name+" 年齡:"+age; } public Person(){ } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
再來看看toString()方法返回的值:
public class Test5 { public static void main(String[] args) { Person p1=new Person(); System.out.println(p1.toString()); //重寫了toString()方法,返回的是方法的返回值 Person p2=new Person("aaa",18); System.out.println(p2.toString()); // 姓名: null 年齡:0 // 姓名: aaa 年齡:18 } }
2.equals方法:
equals()方法的源碼如下所示:
public boolean equali(Object obj){ return this==obj; }
因為 == 比較的是對象的地址值,所以O(shè)bject類的equals()默認(rèn)比較的是地址值,需要重寫才有意義。具體如何重寫,就看我們比較兩個對象是否相同的依據(jù)是什么了。
舉個例子:我們規(guī)定,如果兩個人的姓名和年齡都一樣,那么兩個人相同。
//重寫Person類的equals()方法 @Override public boolean equals(Object obj) { return this.name==((Person)obj).name&&this.age==((Person)obj).age; }
再來測試一下equals()方法:
public class Test5 { public static void main(String[] args) { Person p3=new Person("aa",21); Person p4=new Person("aa",23); Person p5=new Person("bb",21); Person p6=new Person("aa",21); System.out.println(p3.equals(p4)); //false System.out.println(p3.equals(p5)); //false System.out.println(p3.equals(p6)); //true } }
equals()方法的注意事項:
(1)除了用a.equals(b)這個寫法之外,也可以用Objects.equals(a,b),作用是一樣的。
(2)equals方法空指針安全,即容忍空指針。即equals()方法中的參數(shù)可以有null,返回值永遠(yuǎn)為false。
(3)null不可以調(diào)用方法,所以若a為空,則不能調(diào)用a.equals()方法,否則會出現(xiàn)NullPointERException.正因為如此,我們一般將常量或已知非空的對象放在前面,即寫成"aa".equals(str)而不是str.equals("aa").
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。