Java中的== 和equals()方法詳解與實例
Java中的== 和equals()方法:
Java中的數(shù)據(jù)類型,可分為兩類:
1.基本數(shù)據(jù)類型,也稱原始數(shù)據(jù)類型。
byte,short,char,int,long,float,double,boolean,他們之間的比較,應用雙等號(==),比較的是他們的值。
2.引用數(shù)據(jù)類型(類)
當它們用(==)進行比較的時候,比較的是他們在內(nèi)存中的存放地址,所以,除非是同一個new出來的對象,他們的比較后的結果為true,否則比較后結果為false。
Java當中所有的類都是繼承于Object這個基類的,在Object中的基類中定義了一個equals()的方法,這個方法的初始行為是比較對象的內(nèi)存地址,但在一些類庫當中這個方法被覆蓋掉了,如String,Integer,Date在這些類當中equals有其自身的實現(xiàn),而不再是比較類在堆內(nèi)存中的存放地址。
對于引用數(shù)據(jù)類型之間進行equals比較,在沒有覆寫equals方法的情況下,他們之間的比較還是基于他們在內(nèi)存中的存放位置的地址值的,因為Object的equals方法也是用雙等號(==)進行比較的,所以比較后的結果跟雙等號(==)的結果相同。
Object中的equals()方法
publicbooleanequals(Objectobj){ return(this==obj); } 舉個實例: packageorg.java.test; publicclassPerson{ privateintage; privateStringname; publicintgetAge(){ returnage; } publicvoidsetAge(intage){ this.age=age; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicPerson(intage,Stringname){ this.age=age; this.name=name; } publicPerson(){ } @Override publicinthashCode(){ finalintprime=31; intresult=1; result=prime*result+age; result=prime*result+((name==null)?0:name.hashCode()); returnresult; } @Override publicbooleanequals(Objectobj){ if(this==obj) returntrue; if(obj==null) returnfalse; if(getClass()!=obj.getClass()) returnfalse; Personother=(Person)obj; if(age!=other.age) returnfalse; if(name==null){ if(other.name!=null) returnfalse; }elseif(!name.equals(other.name)) returnfalse; returntrue; } } MainTest.java[java]view plaincopyprint? packageorg.java.test; publicclassMainTest{ publicstaticvoidmain(String[]args){ Personp1=newPerson(99,"A"); Personp2=newPerson(99,"A"); Personp3=p1; System.out.println(p1==p2);//false System.out.println(p1==p3);//true System.out.println(p1.equals(p2)); //未重寫equals()方法,返回false //重寫equals()方法后,比較的是內(nèi)容,返回true; System.out.println("<====================>"); Strings1="hello"; Strings2="hello"; Strings3=newString("hello"); System.out.println(s1==s2);//true System.out.println(s1==s3);//false System.out.println(s1.equals(s2));//true System.out.println(s1.equals(s3));//true } }
希望本文對各位朋友有所幫助
相關文章
springboot2.5.6集成RabbitMq實現(xiàn)Topic主題模式(推薦)
這篇文章主要介紹了springboot2.5.6集成RabbitMq實現(xiàn)Topic主題模式(推薦),pom.xml引入依賴和常量類創(chuàng)建,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2021-11-11詳解SpringBoot中Controller接收對象列表實現(xiàn)
這篇文章主要介紹了詳解SpringBoot中Controller接收對象列表實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-05-05深入探究Java中的HashMap為什么會產(chǎn)生死循環(huán)
HashMap?死循環(huán)發(fā)生在?JDK?1.8?之前的版本中,這篇文章主要來和大家深入探究一下為什么Java中HashMap會產(chǎn)生死循環(huán),感興趣的小伙伴可以了解一下2023-05-05