溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java?Object類怎么使用

發(fā)布時間:2022-07-14 10:00:39 來源:億速云 閱讀:110 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Java Object類怎么使用”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Java Object類怎么使用”文章能幫助大家解決問題。

    1.equals方法

    ==運算符

    比較運算符,即可以判斷基本類型又可以判斷引用類型

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

    如果判斷引用類型,則判斷地址是否相等,即判斷是否為同一個對象

    equals

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

    object - equals源碼:

    public boolean equals(Object obj) {
        return (this == obj);
    }

    可以清晰的看到,object類里的equals方法是判斷對象的地址是否相同(是不是同一個對象)

    但是,其他數(shù)據(jù)類型類會重寫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

    提高具有哈希結(jié)構(gòu)的容器的效率

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

    哈希值根據(jù)地址而來但并非地址

    演示:

    // 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,"安全服務(wù)工程師");
    System.out.println(a3.toString());

    輸出:

    classes.A@41629346
    包名.類名@十六進(jìn)制的hashCode

    現(xiàn)在我們在類中重寫一下toString方法(模板):

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

    再次運行上面的代碼,現(xiàn)在輸出如下:

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

    另外,當(dāng)我們直接輸出對象時,會默認(rèn)直接調(diào)用toString方法:

    System.out.println(a3);

    輸出:

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

    4.finalize

    當(dāng)對象被回收時,系統(tǒng)自動調(diào)用該對象的finalize方法,子類可以重寫該方法,做一些釋放資源的操作

    注意:在JDK18中。finalize被棄用了。它雖然可以幫助我們主動釋放系統(tǒng)底層資源,但是說實話,沒用過,Java 是自動管理內(nèi)存的,使用它反而會導(dǎo)致潛在的系統(tǒng)安全風(fēng)險,沒幫助不說反而是負(fù)擔(dān),所以計劃移除了。

    實例:

    // finalize
    A a4 = new A("dh",33,"架構(gòu)師");
    a4 = null; // 這是a4成為了垃圾,垃圾回收器就會回收對象
    // 在銷毀對象之前,會調(diào)用對象的finalize方法
    // 程序員就可以在這個方法中寫入自己的業(yè)務(wù),釋放資源

    重寫finalize方法:

    @Override
    protected void finalize() throws Throwable {
        System.out.println("我們銷毀對象");
    }

    除此之外,還可以主動運行垃圾回收器:

    System.gc(); // 主動調(diào)用垃圾回收器

    關(guān)于“Java Object類怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI