Object類和String類 equals() 方法的區別

相信不少學習過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方法進行了重寫。

但願以上幾點對你們有用,共勉。

相關文章
相關標籤/搜索