Java中的Object類用法總結(jié)
1.Object類是什么?
??Object 是 Java 類庫中的一個(gè)特殊類,也是所有類的父類。
也就是說,Java 允許把任何類型的對(duì)象賦給 Object 類型的變量。
??Java里面除了Object類,所有的類存在繼承關(guān)系的。
??Object 類位于 java.lang 包中,編譯時(shí)會(huì)自動(dòng)導(dǎo)入, 當(dāng)一個(gè)類被定義后,如果沒有指定繼承的父類,那么默認(rèn)父類就是 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類中都有什么方法

本篇會(huì)簡(jiǎn)單介紹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);
}如果直接這樣比較,看地址是否相同,就會(huì)輸出false,輸出是錯(cuò)誤的
??那么如果要比較,有什么方法嗎
??在java中提供了一個(gè)方法是equals,可以用來比較兩對(duì)象是否相同
System.out.println(person.equals(person1));
如果直接在main中這樣寫,還是會(huì)輸出false,
這是因?yàn)閜erson里面沒有equals,默認(rèn)是繼承于Object的

可以看到里面比較的還是this和obj,也就是當(dāng)前傳進(jìn)來的參數(shù),所以才是false。
??那么如何用equals進(jìn)行比較
??那就要重寫一個(gè)equals才可以進(jìn)行比較
@Override
public boolean equals(Object obj) {
//判斷當(dāng)前obj參數(shù)是否為null
if (obj == null) {
return false;
}
if (this == obj) {
return true;
}
//不是Person類對(duì)象
if (!(obj instanceof Person)) {
return false;
}
Person ret = (Person) obj;
return this.dz.equals(ret.dz);
}??我們可以String幫助重寫equals了

此時(shí)equals就可以比較了

??比較對(duì)象中內(nèi)容是否相同的時(shí)候 要重寫equals
3.Object類中的hashCode方法
??使用hashCode可以計(jì)算具體的對(duì)象位置,也就是內(nèi)存地址,然后調(diào)Integer.toHexString()方法,將這個(gè)地址以16進(jìn)制輸出

?? 兩個(gè)dz是相同的,然后直接用hashCode計(jì)算內(nèi)存地址,然后代碼發(fā)現(xiàn),內(nèi)存地址是不同的
說明直接這樣中hashCode是不行的,那就要重新實(shí)現(xiàn)一個(gè)hashCode,
下面重寫一下hashCode,
@Override
public int hashCode() {
return Objects.hash(dz);
}然后運(yùn)行代碼試試看,果然重寫之后,內(nèi)存地址相同了

??所以,hashCode是用來定位 位置的
4.編譯器自動(dòng)生成equals和hashCode
一般重寫時(shí),都是這兩個(gè)同時(shí)進(jìn)行重寫

這就是生成好了的 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);
}總結(jié)
到此這篇關(guān)于Java中的Object類用法總結(jié)的文章就介紹到這了,更多相關(guān)Java的Object類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)過濾掉map集合中key或value為空的值示例
這篇文章主要介紹了Java實(shí)現(xiàn)過濾掉map集合中key或value為空的值,涉及java針對(duì)map的簡(jiǎn)單遍歷、判斷、移除等相關(guān)操作技巧,需要的朋友可以參考下2018-06-06
解決@Transactional注解事務(wù)不回滾不起作用的問題
這篇文章主要介紹了解決@Transactional注解事務(wù)不回滾不起作用的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02
Spring Boot定時(shí)器創(chuàng)建及使用解析
這篇文章主要介紹了Spring Boot定時(shí)器創(chuàng)建及使用解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
Java實(shí)現(xiàn)簡(jiǎn)易學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)易學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
一篇文中細(xì)看Java多線程的創(chuàng)建方式
隨著計(jì)算機(jī)的配置越來越高,我們需要將進(jìn)程進(jìn)一步優(yōu)化,細(xì)分為線程,充分提高圖形化界面的多線程的開發(fā),這篇文章主要給大家介紹了如何通過一篇文中細(xì)看Java多線程的創(chuàng)建方式,需要的朋友可以參考下2021-07-07


