1. 程式人生 > 實用技巧 >Object類的兩個方法

Object類的兩個方法

1.toString方法

ps:Object類是所有類的公共父類,定義一個人類即預設繼承Object類

當呼叫toString方法時,預設會返回一個字串(該物件的地址值),但在應用中無意義
所以需要在子類中需覆蓋重寫該方法,通常讓其返回物件的屬性

public class ObjTostring {
    public static void  main(String[] args){
        student obj = new student();
        System.out.println(obj.toString());
        //student{num=30, name='張三'}
} } class student /*extends Object*/{ int num=30; String name = "張三"; @Override//對toString方法進行覆蓋重寫,返回物件的屬性 public String toString() { return "student{" + "num=" + this.num + ", name='" + this.name + '\'' + '}'; } }

2.equals方法

/*
equals方法的原型
public boolean equals(Object obj){
return (this=obj);
}
對於引用型別來說,呼叫equals預設比較的是兩個物件的地址值;但通常兩個物件的地址值是不相等的
所以預設比較的情況下意義不大,通常重寫該方法讓其比較物件的屬性

*/

import java.util.Objects;
public class objEquals {

    public static void main(String[] args){
        //預設情況
        Fame fame1 = new Fame();
        Fame fame2 
= new Fame(); System.out.println(fame1);//CommonAPItwo.Fame@4554617c System.out.println(fame2);//CommonAPItwo.Fame@74a14482 System.out.println(fame1.equals(fame2));//false //重寫後 Fame fame3 = new Fame(20,"穀穗"); Fame fame4 = new Fame(20,"穀穗"); Fame fame5= new Fame(30,"穀穗"); System.out.println(fame3.equals(fame4));//true System.out.println(fame4.equals(fame5));//false } } class Fame { int year=00 ; String crop =" "; /* @Override public boolean equals(Object obj){ if(obj==this){//當obj就是呼叫方法的物件時直接返回true,提高效率 return true; } if (obj==null){//當obj為null時直接返回false,提高效率 return false; } if(obj instanceof Fame) {//提高程式碼安全性(可能傳進來的物件不能向下轉型) Fame f = (Fame) obj; boolean b = (this.year == ((Fame) obj).year && this.crop.equals(f.crop)); return b; } else return false; } */ @Override//IDE自動生成的重寫後的equlas方法 public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; //與o == null或不是安全的向下轉型效果一樣 Fame fame = (Fame) o; return year == fame.year &&Objects.equals(crop, fame.crop); //Objects是一個工具類提供了一些空指標安全的方法操作物件(空指標是不能呼叫方法的) //Objects的equals方法比較兩個物件,但是空指標安全 } public Fame(){ } public Fame(int year,String crop){ this.crop=crop; this.year=year; } }