Object類toString()和equals()方法使用解析
我們知道,Object類是所有類的父類,因此也被稱為根類、祖先。那么,我們就來看一看Object類的最常用的兩個(gè)方法是如何用的。
1.toString方法:
Object類的toString()方法默認(rèn)返回的是對(duì)象地址值,如果某個(gè)類的toString()方法返回的不是對(duì)象地址值,則說明這個(gè)類重寫了toString()方法。
public class Test5 {
public static void main(String[] args) {
Person p1=new Person();
System.out.println(p1.toString());
//沒有重寫toString()方法,返回的是對(duì)象的地址值 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;
}
因?yàn)?== 比較的是對(duì)象的地址值,所以O(shè)bject類的equals()默認(rèn)比較的是地址值,需要重寫才有意義。具體如何重寫,就看我們比較兩個(gè)對(duì)象是否相同的依據(jù)是什么了。
舉個(gè)例子:我們規(guī)定,如果兩個(gè)人的姓名和年齡都一樣,那么兩個(gè)人相同。
//重寫Person類的equals()方法
@Override
public boolean equals(Object obj) {
return this.name==((Person)obj).name&&this.age==((Person)obj).age;
}
再來測(cè)試一下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()方法的注意事項(xiàng):
(1)除了用a.equals(b)這個(gè)寫法之外,也可以用Objects.equals(a,b),作用是一樣的。
(2)equals方法空指針安全,即容忍空指針。即equals()方法中的參數(shù)可以有null,返回值永遠(yuǎn)為false。
(3)null不可以調(diào)用方法,所以若a為空,則不能調(diào)用a.equals()方法,否則會(huì)出現(xiàn)NullPointERException.正因?yàn)槿绱?,我們一般將常量或已知非空的?duì)象放在前面,即寫成"aa".equals(str)而不是str.equals("aa").
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java8 stream 如何打印數(shù)據(jù)元素
這篇文章主要介紹了java8 stream 如何打印數(shù)據(jù)元素,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
java固定大小隊(duì)列的幾種實(shí)現(xiàn)方式詳解
隊(duì)列的特點(diǎn)是節(jié)點(diǎn)的排隊(duì)次序和出隊(duì)次序按入隊(duì)時(shí)間先后確定,即先入隊(duì)者先出隊(duì),后入隊(duì)者后出隊(duì),這篇文章主要給大家介紹了關(guān)于java固定大小隊(duì)列的幾種實(shí)現(xiàn)方式,需要的朋友可以參考下2021-07-07
java獲取當(dāng)前時(shí)間的四種方法代碼實(shí)例
這篇文章主要介紹了java獲取當(dāng)前時(shí)間的四種方法代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
java中pdf轉(zhuǎn)圖片的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄猨ava中pdf轉(zhuǎn)圖片的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12

