Object類中的五種方法
阿新 • • 發佈:2019-01-02
public boolean equals(Object obj) {
return (this == obj);
}
Object類本身比較的是兩個物件的地址
程式設計師可以按照自己的意願將記憶體裡面不同的兩個物件視為相等物件 -> 邏輯相等也就是說,制定一個型別比較的規則,當什麼條件成立的時候,可以將兩個不同的物件視為相等物件
Object類中equals()原始碼如下:
//物件1.equals(物件2)
public boolean equals(Object obj){//普通方法,需要用物件來呼叫
//this:當前呼叫equals方法的物件
//obj:表示引數傳來要參與比較的另一個物件
//==:比較地址
return (this == obj);
}
-------------
public class ExecEquals01 {
public static void main(String[] args){
Student stu1 = new Student("王天一",12,"A");
Student stu2 = new Student("陳浩南",24,"O");
Student stu3 = new Student("山雞",25,"A");
System.out.println(stu1.equals(stu2)); //列印 false
System.out.println(stu1.equals(stu3)); //列印 true
}
}
/**
定義一個Student型別
屬性:name age blood
建立物件時 完成所有屬性的賦值
只要兩個學生的血型一樣就視為相等物件
*/
class Student{
String name;
int age;
String blood;
public Student(String name,int age,String blood){
this.name = name;
this.age = age;
this.blood = blood;
}
@Override
public boolean equals(Object obj){//覆寫的條件 1.發生在有繼承關係的子類中 2.許可權修飾符大於父類被覆寫方法許可權修飾符;返回型別jdk5.0之前必須一致,jdk5.0之後可以是父類方法返回型別的子類型別,稱為協變返回型別;方法簽名(方法名和方法引數)必須一致 3.丟擲異常的範圍必須小於父類被覆寫的方法丟擲的異常
String blood1 = this.blood;
String blood2 = ((Student)obj).blood;
return blood1.equals(blood2);
}
}
-------------
public class ExecEquals02 {
public static void main(String[] args){
Food f1 = new Food("豆腐西施",12.5,"熱菜");
Food f2 = new Food("西紅柿炒雞蛋",12.5,"熱菜");
Food f3 = new Food("豆腐西施",12.5,"熱菜");
System.out.println(f1.equals(f2));
System.out.println(f1.equals(f3));
}
}
/**
定義一個Food型別
屬性:name price type
兩個菜的所有屬性一樣就視為兩個物件相等
考慮一行實現
*/
class Food{
String name;
double price;
String type;
public Food(String name,double price,String type){
this.name = name;
this.price = price;
this.type = type;
}
@Override
public boolean equals(Object obj){
return (this.name).equals(((Food)obj).name) &&
(this.price == ((Food)obj).price) &&
(this.type.equals(((Food)obj).type));
}
}
-------------