日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

重写Object类的equals方法

發(fā)布時(shí)間:2024/4/13 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 重写Object类的equals方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
package com.learn.demo01.Object;import java.util.ArrayList;public class Demo02Equals {public static void main(String[] args) {/*Person類默認(rèn)繼承了Object類,所以可以使用Object類的equals方法boolean equals(Object obj) 指示其他某個(gè)對(duì)象是否與此對(duì)象“相等”。equals方法源碼:public boolean equals(Object obj) {return (this == obj);}參數(shù):Object obj:可以傳遞任意的對(duì)象== 比較運(yùn)算符,返回的是一個(gè)布爾值 true false基本數(shù)據(jù)類型:比較的是值引用數(shù)據(jù)類型:比價(jià)的是兩個(gè)對(duì)象的地址值this是誰?那個(gè)對(duì)象調(diào)用的方法,方法中的this就是那個(gè)對(duì)象;p1調(diào)用的equals方法所以this就是p1obj是誰?傳遞過來的參數(shù)p2this==obj -->p1==p2*/Person p1 = new Person("迪麗熱巴",18);//Person p2 = new Person("古力娜扎",19);Person p2 = new Person("迪麗熱巴",18);System.out.println("p1:"+p1);//p1:com.learn.demo01.Object.Person@58ceff1System.out.println("p2:"+p2);//p2:com.learn.demo01.Object.Person@7c30a502//p1=p2;//把p2的地址值賦值給p1ArrayList<String> list = new ArrayList<>();boolean b = p1.equals(p1);System.out.println(b);} } package com.learn.demo01.Object;import java.util.Objects;public class Person {private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}/*直接打印對(duì)象的地址值沒有意義,需要重寫Object類中的toString方法打印對(duì)象的屬性(name,age)*//*@Overridepublic String toString() {//return "abc";return "Person{name="+name+" ,age="+age+"}";}*//*@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}*//*Object類的equals方法,默認(rèn)比較的是兩個(gè)對(duì)象的地址值,沒有意義所以我們要重寫equals方法,比較兩個(gè)對(duì)象的屬性(name,age)問題:隱含著一個(gè)多態(tài)多態(tài)的弊端:無法使用子類特有的內(nèi)容(屬性和方法)Object obj = p2 = new Person("古力娜扎",19);解決:可以使用向下轉(zhuǎn)型(強(qiáng)轉(zhuǎn))把obj類型轉(zhuǎn)換為Person*//*@Overridepublic boolean equals(Object obj) {//增加一個(gè)判斷,傳遞的參數(shù)obj如果是this本身,直接返回true,提高程序的效率if(obj==this){return true;}//增加一個(gè)判斷,傳遞的參數(shù)obj如果是null,直接返回false,提高程序的效率if(obj==null){return false;}//增加一個(gè)判斷,防止類型轉(zhuǎn)換一次ClassCastExceptionif(obj instanceof Person){//使用向下轉(zhuǎn)型,把obj轉(zhuǎn)換為Person類型Person p = (Person)obj;//比較兩個(gè)對(duì)象的屬性,一個(gè)對(duì)象是this(p1),一個(gè)對(duì)象是p(obj->p2)boolean b = this.name.equals(p.name) && this.age==p.age;return b;}//不是Person類型直接返回falsereturn false;}*/@Overridepublic boolean equals(Object o) {if (this == o) return true;//getClass() != o.getClass() 使用反射技術(shù),判斷o是否是Person類型 等效于 obj instanceof Personif (o == null || getClass() != o.getClass()) return false;Person person = (Person) o;return age == person.age &&Objects.equals(name, person.name);}@Overridepublic int hashCode() {return Objects.hash(name, 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;} }

?

總結(jié)

以上是生活随笔為你收集整理的重写Object类的equals方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。