日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Object与equals

發布時間:2024/10/14 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Object与equals 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. Object
    • 2. equals

本文已同步到:https://www.bithachi.cn/posts/a501ac60.html

1. Object

  • Object類是所有Java類的根父類
  • 如果在類的聲明中未使用extends關鍵字指明其父類,則默認父類為java.lang.Object類
public class Person { ... } 等價于: public class Person extends Object { ... }
  • 可以使用 Object 類型的變量引用任何類型的對象:
method(Object obj){} //可以接收任何類作為其參數 Person o=new Person(); method(o);
  • Object中的方法:

  • Object 類型的變量只能用于作為各種值的通用持有者。要想對其中的內容進行具體的 操作,還需要清楚對象的原始類型, 并進行相應的類型轉換:

  • 所有的數組類型,不管是對象數組還是基本類型的數組都擴展了 Object 類。

2. equals

  • 基本類型比較值:只要兩個變量的值相等,即為true。
    int a=5; if(a==5){…}

  • 引用類型比較引用(是否指向同一個對象地址):只有指向同一個對象地址時,==才返回true。

    public static void main(String[] args) {Person p1=new Person();Person p2=new Person();Person p3=p2;Object o=p2;if(p1==p2)System.out.println("p1==p2");if(p1.equals(p2))System.out.println("p1 is equals p2");if(p3.equals(p2))System.out.println("p3 is equals p2");if(o.equals(p2))System.out.println("o is equals p2");}

    運行結果:

    p3 is equals p2 o is equals p2

    內存分析:

    Object源碼中equals:

    public boolean equals(Object obj) { //子類可重寫return (this == obj);} /* 我們可以知道比較的是引用指向的對象地址是否相同,相同則返回true,不相同則返回false */
  • 特例 :當用equals() 方法進行比較時 ,對類File 、String 、Date 及包裝類( (Wrapper Class) ) 來說 , 是比較類型及內容而不考慮引用的是否是同一個對象 ;
    原因:在這些類中重寫了Object 類的equals() 方法 。

    看看String的equals:

    /*** Compares this string to the specified object. The result is {@code* true} if and only if the argument is not {@code null} and is a {@code* String} object that represents the same sequence of characters as this* object.** @param anObject* The object to compare this {@code String} against** @return {@code true} if the given object represents a {@code String}* equivalent to this string, {@code false} otherwise** @see #compareTo(String)* @see #equalsIgnoreCase(String)*/ public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String anotherString = (String)anObject;int n = value.length;if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;}
  • 當自定義使用equals()時 時 , 可以重寫 。 用于比較兩個對象的 “ 內容 ” 是否都相等

重寫equals() 方法的原則:

  • 對稱性:如果x.equals(y)返回是“true”,那么y.equals(x)也應該返回是“true”。

  • 自反性:x.equals(x)必須返回是“true”。

  • 傳遞性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也應該返回是“true”。

  • 一致性:如果x.equals(y)返回是“true”,只要x和y內容一直不變,不管你重復x.equals(y)多少次,返回都是“true”。

  • 任何情況下,x.equals(null),永遠返回是“false”;

    x.equals(和x不同類型的對象)永遠返回是“false”

    面試題:== 和equals 的區別注意事項:

  • == 既可以比較基本類型也可以比較引用類型。對于基本類型就是比較值,對于引用類型就是比較內存地址

  • equals 的話,它是屬于java.lang.Object 類里面的方法,如果該方法沒有被重寫過默認也是==;

    我們可以到 看到String類 等類的 的equals 方法是被重寫過的,而且String 類在日常開發中了 用的比較多,久而久之,形成了equals 是比較值的錯誤觀點。

  • 具體要看自定義類里有沒有重寫Object 的equals 方法來判斷。

  • 通常情況下,重寫equals 方法,會比較類中的相應屬性是否都相等

  • String str1 = new String("hello"); String str2 = new String("hello"); System.out.println("str1和str2是否相等?"+ (str1 == str2));//false System.out.println("str1是否equals str2?"+(str1.equals(str2)));//true

    總結

    以上是生活随笔為你收集整理的Object与equals的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。