1. 程式人生 > >Java學習筆記二十四:Java中的Object類

Java學習筆記二十四:Java中的Object類

div equals int 父類 false info nim TE 操作

Java中的Object類

一:什麽是Object類;

  Object類是所有類的父類,相當於所有類的老祖宗,如果一個類沒有使用extends關鍵字明確標識繼承另外一個類,那麽這個類默認繼承Object類。

  Object類中的方法,適合所有子類。

二:toString()方法;

  在OBject類裏面定義toString()方法的時候返回的對象的哈希code碼(對象地址字符串)。

  如果我們在代碼裏直接輸出一個對象,你會發現它輸出的這個對象在內存中的地址,我們把它稱為哈希碼,它是通過哈希算法生成的一個字符串,是用來唯一區分對象的,可以想象為身份證號。

  可以通過重寫toString()方法表示出對象的屬性

舉一個例子:

Initail主函數:

package com.test;

public class Initail {

    public static void main(String[]args){
        
        Dog dog = new Dog();//這裏我們定義了一個dog對象
        System.out.println(dog);//我們如果現在輸入dog的值
    }
}

Dog類:

package com.test;

//Dog對象繼承於Animal類
public class Dog extends Animal{
    public int
age = 20; public void eat(){ System.out.println("狗有吃骨頭的能力"); } public Dog(){ System.out.println("Dog類執行了"); } public void method(){ eat(); } }

Animal類:

package com.test;
//Animal類並沒有明確表明它繼承於那個類,他就相當於繼承了Object類
public class Animal extends Object{
    public
int age=10;//為屬性賦初值 public String name; public void eat(){ System.out.println("動物是可以吃東西的"); } public Animal(){ System.out.println("Animal類執行了"); } }

運行結果為:

技術分享圖片

此時我們看到它輸出的是dog類的包名+dog對象在內存中的地址

重寫從父類繼承來的toString)方法:

在Eclipse中的source下選擇技術分享圖片選項

技術分享圖片

確認即可完成

修改後的Dog類:

package com.test;

//Dog對象繼承於Animal類
public class Dog extends Animal{
    public int age = 20;
    public void eat(){
        System.out.println("狗有吃骨頭的能力");
    }
    public Dog(){
        System.out.println("Dog類執行了");
    }
    @Override
    public String toString() {
        return "Dog [age=" + age + "]";
    }
    public void method(){
        eat();
    }
}

運行結果為:

技術分享圖片

此時便輸出了對象屬性的值。

三:equals()方法;

equals()方法比較的是對象的引用是否指向同一塊內存地址

Dog dog = new Dog();

這個dog對象並不是我們創建的對象,而是對象在內存中的地址,在操作對象的地址的時候相當於間接操作了對象的值。這個dog就是引用。

一般情況下比較兩個對象時比較他的值是否一致,所以要進行重寫。

舉一個例子:

主函數Initail:

package com.test;

public class Initail {

    public static void main(String[]args){
        
        Dog dog = new Dog();//這裏我們定義了一個dog對象
        dog.age = 15;
        Dog dog2 = new Dog();//繼續創建一個dog對象
        dog2.age = 15;
        //比較兩個對象是否符合equals
        if(dog.equals(dog2)){
            System.out.println("兩個對象是相同的");
        }
        else{
            System.out.println("兩個對象是不相同的");
        }
    }
}

運行結果為:

技術分享圖片

  雖然我們賦給對象的值是相同的,但是new兩個對象其實是開辟了兩個不同的內存空間,因為equals對比兩個內存地址是否相同,所以兩個對象不同。

重寫方法:

我們選擇eclipse的source下的技術分享圖片選項

Initail類:

package com.test;

public class Initail {

    public static void main(String[]args){
        
        Dog dog = new Dog();//這裏我們定義了一個dog對象
        dog.age = 15;
        Dog dog2 = new Dog();//繼續創建一個dog對象
        dog2.age = 15;
        //比較兩個對象是否符合equals
        if(dog.equals(dog2)){
            System.out.println("兩個對象是相同的");
        }
        else{
            System.out.println("兩個對象是不相同的");
        }
    }
}

Dog類:

package com.test;

//Dog對象繼承於Animal類
public class Dog extends Animal{
    public int age = 20;
    public void eat(){
        System.out.println("狗有吃骨頭的能力");
    }
    public Dog(){
        System.out.println("Dog類執行了");
    }
    @Override
    public String toString() {
        return "Dog [age=" + age + "]";
    }
    public void method(){
        eat();
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)//判斷兩個引用的值是否相同
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())//判斷兩個對象的類型是否相同
            return false;
        Dog other = (Dog) obj;
        if (age != other.age)//兩個屬性的屬性值是否相同
            return false;
        return true;
    }
}

其中:getClass()方法比較兩個類對象是否相同,類對象和類的對象的關註點如下

技術分享圖片

運行結果為:

技術分享圖片

Java學習筆記二十四:Java中的Object類