天天看點

java中equals和==以及toString

我們通常在控制台輸出時使用system.out.print(),print隻能直接輸出基本類型和字元串,對于其他的類型直接輸出将會輸出@開頭的引用,是以若需要輸出對應的内容則需要使用tosring方法。

tostring方法屬于object,object是所有類的頂級父類,都繼承了tostring方法,在實際使用的時候需要重寫tostring方法然後實作内容的直接輸出。

==用來判斷兩個變量是否相等,如果是基本類型,則隻要值相等,判斷的結果就是true,例如65和‘a’比較,結果就是true。如果是比較的引用類型,那麼隻有在兩個變量指向的是同一對象時才是true,例如string a="111",string a1=new string("111");他們==比較的結果就是false,因為他們是兩個對象。

如果想要讓兩個隻要内容相同的對象比較結果就是true,那麼可以使用equals來比較,但是需要對equals進行重寫。

equals預設情況下内部就是==比較,是以如果不重寫的話,比較結果和==比較一樣,在string中已經重寫了equals方法。

重寫equals方法是自定義相等的規則,是以不僅僅是能實作上述的情況,還可以讓不相等的對象相等,是看怎麼寫了。

正确重寫equals應遵循的條件:

1.對于任意x,x.equals(x)結果要是true;自反性

2.對于任意x、y,如果x.equals(y)是true,那麼y.equals(x)也應該是true;對稱性

3.對于任意的x、y、z,如果x.equals(y)是true,y.equals(z)是true,那麼x.equals(z)也應該是true;傳遞性

4.對于任意x、y,若對象中用于等價比較的資訊未變,那麼無論調用多少次x.equals(y)的結果應該是同樣的,要麼都是true要麼都是false;一緻性

5.對于任何非null的對象,x.equals(null)一定是false;

重寫equals方法的時候,一般要用到instanceof和強制類型轉換,然後當類型比對時再進行比較。