Object類和String類equals方法有什么區別?


相信很多學習過Java的同學都知道,在比較兩個String對象的內容是否相同時是使用equals方法的

如:String str1=new String(“A”);
     String str2=new String(“B”);
     String str3=new String(“B”);
     boolean result1= str1.equals(str2);
     boolean result2= str2.equals(str3);
     System.out.println(result1);
     System.out.println(result2);
則輸入的result1為false,result2為true。因為str1與str2的內容不相同,而str2與str3內容相同都是“B”。
 
而在String類中使用“==”時,比較的是兩個String對象的引用是否指向同一個對象,如
     String str4=new String(“B”);
     String str5=new String(“B”);
     String str6=str5;
     boolean result3=(str4==str5);
     boolean result4= (str5==str6);
     System.out.println(result3);
     System.out.println(result4);
則輸入的result3為false,result4為true。因為str4、str5雖然內容相同但它們是不同的對象,就像兩個同樣的杯子裝着同樣多的水,可它們是不同的,result3為false。而str5、str6是指向同一個String對象的,所以result4為true。
再說明一點,String str = new String("abc")和String str ="abc"是有一點小區別的,對於new出來的String對象,是每new一個內存里生成一個,也就是說其允許存在內容相同的重復對象。而String str ="abc"這種形式是不允許存在內容相同的重復對象,只要內存已經存在了,就不再新生成,而是把新的引用指向原來的對象。
 
以上是String類equals方法和"=="的區別和聯系。下面再說說Object類的equals方法。
大家首先要明確一點Object類是所有Java類的父類,所有的Java類都要繼承Object類,所以通常我們寫程序的時候不顯式聲明繼承Object類,而是默認繼承Object類。
在Object類的equals方法的本質其實是和“==”一樣的,都是比較兩個對象引用是否指向同一個對象(即兩個對象是否為同一對象)。那為什么String類的equals方法卻又是比較兩個String對象的內容是否相同呢?
原來是這樣的,String類繼承Object類后,也繼承了equals方法,但String類對equals方法進行了重寫,改變了equals方法的比較形式。其實很多其他類繼承Object類后也對equals方法進行了重寫。
希望以上幾點對大家有用,共勉。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM