亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

深入了解Java Object類的使用

 更新時(shí)間:2022年07月13日 15:44:37   作者:世界盡頭與你  
java繼承中說(shuō)到的Object類是java中一個(gè)特殊的類,所有的類都是直接或者間接的繼承自O(shè)bject類。本文就和大家詳細(xì)講講Java Object類的使用,感興趣的可以了解一下

1.equals方法

==運(yùn)算符

比較運(yùn)算符,即可以判斷基本類型又可以判斷引用類型

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

如果判斷引用類型,則判斷地址是否相等,即判斷是否為同一個(gè)對(duì)象

equals

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

object - equals源碼:

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

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

但是,其他數(shù)據(jù)類型類會(huì)重寫(xiě)equals方法,比如String類的重寫(xiě):(判斷兩個(gè)字符串的值是否相等)

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);
}

實(shí)例:

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)的容器的效率

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

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

演示:

// 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

返回該對(duì)象的字符串表示

源碼:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

實(shí)例:

// toString
A a3 = new A("dahe",25,"安全服務(wù)工程師");
System.out.println(a3.toString());

輸出:

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

現(xiàn)在我們?cè)陬愔兄貙?xiě)一下toString方法(模板):

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

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

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

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

System.out.println(a3);

輸出:

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

4.finalize

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

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

實(shí)例:

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

重寫(xiě)finalize方法:

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

除此之外,還可以主動(dòng)運(yùn)行垃圾回收器:

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

到此這篇關(guān)于深入了解Java Object類的使用的文章就介紹到這了,更多相關(guān)Java Object類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論