Object類
Object類是所有類的父類
類中有一些方法(都需要掌握)
toString()方法
在學習類的對象的時候有介紹過了,當我們重新給此方法就會打印類與對象的信息
equals()方法
在Java中的比較,
如果==左右兩側是基本類型變量,比較的是變量中值是否相同。
如果==左右兩側是引用類型變量,比較的是引用變量地址是否相同。
如果要比較引用類型指向的值相同,需要重寫equals()方法。
代碼展示:
import java.util.Objects;
public class Student {private String name;private int age;public Student(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}
public class Test {public static void main(String[] args) {Student stu1 = new Student("lisi",18);Student stu2 = new Student("lisi",18);System.out.println(stu1 == stu2);System.out.println(stu1.equals(stu2));System.out.println("----------");String str1 = new String("abc");String str2 = new String("abc");System.out.println(str1 == str2);System.out.println(str1.equals(str2));}
}
輸出:
false
flase
----------
false
true
代碼解釋:
1、對于對象,== 比較的是引用,即是否指向同一內存地址。Student是類stu1和stu2是引用變量,分別引用 Student 類創建的對象。
2、用equals()方法,當沒有重寫equals()方法時,調用父類Object類的equals()方法,比較的是兩個地址是否相同,而非指向的內容是否相同。
3、為了能比較指向的內容是否相同,需要重寫equals()方法。
(可以借助編譯器生成)
@Override//進行了比較合理性的判斷public boolean equals(Object o) {if (this == o) return true;//自己比自己if (o == null || getClass() != o.getClass()) return false;//為空和類型不相同,返回falseStudent student = (Student) o;return age == student.age && Objects.equals(name, student.name);}
此時之前的輸出結果發生變化
輸出:
false
true
----------
false
true
4、為什么String類的equals()方法比較的是指向的內容?因為String本身已經重寫了equals()方法。
hashCode()方法
源碼:
public native int hashCode();
我們認為兩個名字相同,年齡相同的對象,將存儲在同?個位置。當沒有重寫hashCode()方法時,他們的hash值不相同。
我們需要重寫hashCode()方法。
(可以借助編譯器生成)
@Overridepublic int hashCode() {return Objects.hash(name, age);}
其他關于hashCode()方法知識后續在講。
其他方法之后學習中介紹
總結
對于我們自定義的類時,我們最好通過編譯器重寫toString()方法、equals()方法等。