Java中的Object類用法總結
1.Object類是什么?
??Object 是 Java 類庫中的一個特殊類,也是所有類的父類。
也就是說,Java 允許把任何類型的對象賦給 Object 類型的變量。
??Java里面除了Object類,所有的類存在繼承關系的。
??Object 類位于 java.lang 包中,編譯時會自動導入, 當一個類被定義后,如果沒有指定繼承的父類,那么默認父類就是 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類中都有什么方法
本篇會簡單介紹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); }
如果直接這樣比較,看地址是否相同,就會輸出false,輸出是錯誤的
??那么如果要比較,有什么方法嗎
??在java中提供了一個方法是equals,可以用來比較兩對象是否相同
System.out.println(person.equals(person1));
如果直接在main中這樣寫,還是會輸出false,
這是因為person里面沒有equals,默認是繼承于Object的
可以看到里面比較的還是this和obj,也就是當前傳進來的參數(shù),所以才是false。
??那么如何用equals進行比較
??那就要重寫一個equals才可以進行比較
@Override public boolean equals(Object obj) { //判斷當前obj參數(shù)是否為null if (obj == null) { return false; } if (this == obj) { return true; } //不是Person類對象 if (!(obj instanceof Person)) { return false; } Person ret = (Person) obj; return this.dz.equals(ret.dz); }
??我們可以String幫助重寫equals了
此時equals就可以比較了
??比較對象中內(nèi)容是否相同的時候 要重寫equals
3.Object類中的hashCode方法
??使用hashCode可以計算具體的對象位置,也就是內(nèi)存地址,然后調(diào)Integer.toHexString()方法,將這個地址以16進制輸出
?? 兩個dz是相同的,然后直接用hashCode計算內(nèi)存地址,然后代碼發(fā)現(xiàn),內(nèi)存地址是不同的
說明直接這樣中hashCode是不行的,那就要重新實現(xiàn)一個hashCode,
下面重寫一下hashCode,
@Override public int hashCode() { return Objects.hash(dz); }
然后運行代碼試試看,果然重寫之后,內(nèi)存地址相同了
??所以,hashCode是用來定位 位置的
4.編譯器自動生成equals和hashCode
一般重寫時,都是這兩個同時進行重寫
這就是生成好了的 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); }
總結
到此這篇關于Java中的Object類用法總結的文章就介紹到這了,更多相關Java的Object類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java實現(xiàn)過濾掉map集合中key或value為空的值示例
這篇文章主要介紹了Java實現(xiàn)過濾掉map集合中key或value為空的值,涉及java針對map的簡單遍歷、判斷、移除等相關操作技巧,需要的朋友可以參考下2018-06-06解決@Transactional注解事務不回滾不起作用的問題
這篇文章主要介紹了解決@Transactional注解事務不回滾不起作用的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02