中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Java中的Object類知識點有哪些

發布時間:2022-06-16 13:54:38 來源:億速云 閱讀:115 作者:iii 欄目:編程語言

這篇文章主要講解了“Java中的Object類知識點有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java中的Object類知識點有哪些”吧!

Java中的Object類知識點有哪些

1.Object類是什么?

Object 是 Java 類庫中的一個特殊類,也是所有類的父類。

也就是說,Java 允許把任何類型的對象賦給 Object 類型的變量。

java里面除了Object類,所有的類存在繼承關系的。

Object 類位于 java.lang 包中,編譯時會自動導入, 當一個類被定義后,如果沒有指定繼承的父類,那么默認父類就是 Object 類。

class Person {}
class Student {}
public class Test03 {
    public static void func(Object o) {  }

    public static void main(String[] args) {
        func(new Person());
        func(new Student());
    }
    public static void main1(String[] args) {
        Object o = new Person();
        Object o2 = new Student();
    }
}

下面來看一下Object類中都有什么方法

Java中的Object類知識點有哪些

本篇會簡單介紹hashCode(),equals()

2.Object類中的equals方法

下面看這樣一段代碼

class Person {
    public String dz;
    public Person(String dz) {
        this.dz = dz;
    }
    @Override
    public String toString() {
        return "Person{" +
                "dz='" + dz + '\'' +
                '}';
    }
}
class Student {

}
public class Test03 {

    public static void main(String[] args) {
        Person person = new Person("beijing");
        Person person1 = new Person("beijing");
        System.out.println(person == person1);
}

如果直接這樣比較,看地址是否相同,就會輸出false,輸出是錯誤的

那么如果要比較,有什么方法嗎

在java中提供了一個方法是equals,可以用來比較兩對象是否相同

   System.out.println(person.equals(person1));

如果直接在main中這樣寫,還是會輸出false,

這是因為person里面沒有equals,默認是繼承于Object的

Java中的Object類知識點有哪些

可以看到里面比較的還是this和obj,也就是當前傳進來的參數,所以才是false。

那么如何用equals進行比較

那就要重寫一個equals才可以進行比較

    @Override
    public boolean equals(Object obj) {
        //判斷當前obj參數是否為null
        if (obj == null) {
            return false;
        }
        if (this == obj) {
            return true;
        }
        //不是Person類對象
        if (!(obj instanceof Person)) {
            return false;
        }
        Person ret = (Person) obj;
        return this.dz.equals(ret.dz);
    }

我們可以String幫助重寫equals了

Java中的Object類知識點有哪些

此時equals就可以比較了

Java中的Object類知識點有哪些

比較對象中內容是否相同的時候 要重寫equals


3.Object類中的hashCode方法

使用hashCode可以計算具體的對象位置,也就是內存地址,然后調Integer.toHexString()方法,將這個地址以16進制輸出

兩個dz是相同的,然后直接用hashCode計算內存地址,然后代碼發現,內存地址是不同的

說明直接這樣中hashCode是不行的,那就要重新實現一個hashCode,Java中的Object類知識點有哪些

下面重寫一下hashCode,

    @Override
    public int hashCode() {
        return Objects.hash(dz);
    }

然后運行代碼試試看,果然重寫之后,內存地址相同了

Java中的Object類知識點有哪些

所以,hashCode是用來定位 位置的


4.編譯器自動生成equals和hashCode

一般重寫時,都是這兩個同時進行重寫

Java中的Object類知識點有哪些

這就是生成好了的 equals和hashCode

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return Objects.equals(dz, person.dz);
    }

感謝各位的閱讀,以上就是“Java中的Object類知識點有哪些”的內容了,經過本文的學習后,相信大家對Java中的Object類知識點有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湛江市| 石首市| 赞皇县| 南华县| 雷山县| 河曲县| 衢州市| 昌乐县| 文登市| 铜川市| 兴国县| 巩留县| 林州市| 哈密市| 治县。| 竹北市| 饶阳县| 绩溪县| 株洲县| 鹤山市| 衡南县| 东明县| 永城市| 韩城市| 慈溪市| 三明市| 启东市| 政和县| 柘城县| 汉沽区| 玛多县| 潞西市| 济源市| 彰化县| 大理市| 安平县| 蓬安县| 社旗县| 乌苏市| 龙海市| 镇原县|