相信不少學習過Java的同窗都知道,在比較兩個String對象的內容是否相同時是使用equals方法的學習
如:String str1=new String(「A」);spa
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」。im
而在String類中使用「==」時,比較的是兩個String對象的引用是否指向同一個對象,如co
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。由於str四、str5雖然內容相同但它們是不一樣的對象,就像兩個一樣的杯子裝着一樣多的水,可它們是不一樣的,result3爲false。而str五、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方法進行了重寫。
但願以上幾點對你們有用,共勉。