首頁 > Java > java教程 > 主體

Java Object類別怎麼使用

WBOY
發布: 2023-05-13 17:13:14
轉載
1462 人瀏覽過

    1.equals方法

    ==運算子

    比較運算符,也就是可以判斷基本型別又可以判斷參考型別

    如果判斷基本類型,則判斷值是否相等

    如果判斷引用類型,則判斷位址是否相等,即判斷是否為同一個物件

    equals

    是object類別的一個方法,只能判斷引用型別

    object - equals原始碼:

    public boolean equals(Object obj) {
        return (this == obj);
    }
    登入後複製

    可以清楚的看到,object類別裡的equals方法是判斷物件的位址是否相同(是不是同一個物件)

    但是,其他資料型別類別會重寫equals方法,例如String類別的重寫:(判斷兩個字串的值是否相等)

    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        return (anObject instanceof String aString)
                && (!COMPACT_STRINGS || this.coder == aString.coder)
                && StringLatin1.equals(value, aString.value);
    }
    登入後複製

    實例:

    String str1 = new String("hello");
    String str2 = new String("hello");
    System.out.println(str1 == str2); // false
    System.out.println(str1.equals(str2)); // true
    登入後複製

    2.hashCode

    提高具有雜湊結構的容器的效率

    兩個引用如果指向同一個對象,雜湊值肯定(不衝突的情況下)一樣,反之不一樣

    雜湊值根據位址而來但並非位址

    示範:

    // hashCode
    A a = new A();
    A a1 = new A();
    A a2 = a;
    System.out.println(a.hashCode());
    System.out.println(a1.hashCode());
    System.out.println(a2.hashCode());
    ------------------------------
    登入後複製

    輸出:

    1324119927
    990368553
    1324119927

    3.toString

    傳回該物件的字串表示

    #原始碼:

    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
    登入後複製

    ##傳回該物件的字串表示

    #。實例:

    // toString
    A a3 = new A("dahe",25,"安全服务工程师");
    System.out.println(a3.toString());
    登入後複製
    輸出:


    classes.A@41629346
    套件名稱.類別名稱@十六進位的hashCode

    #現在我們在類別中重寫toString方法(模板):

    @Override
    public String toString() {
        return "A{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", job='" + job + '\'' +
                '}';
    }
    登入後複製

    再次運行上面的程式碼,現在輸出如下:

    A{name='dahe', age=25, job='安全服务工程师'}
    登入後複製

    另外,當我們直接輸出物件時,會預設直接調用toString方法:

    System.out.println(a3);
    登入後複製
    輸出:

    A{name='dahe', age=25, job='安全服務工程師'}

    4.finalize

    當物件被回收時,系統會自動呼叫該物件的finalize方法,子類別可以重寫該方法,做一些釋放資源的操作

    注意:在JDK18中。 finalize被棄用了。雖然它可以幫助我們主動釋放系統底層資源,但要說實話,沒用過,Java 是自動管理記憶體的,使用它反而會導致潛在的系統安全風險,沒幫助不說反而是負擔,所以計劃移除了。

    實例:

    // finalize
    A a4 = new A("dh",33,"架构师");
    a4 = null; // 这是a4成为了垃圾,垃圾回收器就会回收对象
    // 在销毁对象之前,会调用对象的finalize方法
    // 程序员就可以在这个方法中写入自己的业务,释放资源
    登入後複製

    重寫finalize方法:

    @Override
    protected void finalize() throws Throwable {
        System.out.println("我们销毁对象");
    }
    登入後複製
    ###除此之外,還可以主動執行垃圾回收器:###
    System.gc(); // 主动调用垃圾回收器
    登入後複製

    以上是Java Object類別怎麼使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    相關標籤:
    來源:yisu.com
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板