【轉】Object類的常用方法
Java語言不同於C++語言,是一種單根繼承結構語言,也就是說,Java中所有的類都有一個共同的祖先。這個祖先就是Object類。
object類的結構
如圖可知,Object類有12個成員方法,按照用途可以分為以下幾種
1,建構函式
2,hashCode和equale函式用來判斷物件是否相同,
3,wait(),wait(long),wait(long,int),notify(),notifyAll()
4,toString()和getClass,
5,clone()
6,finalize()用於在垃圾回收
函式說明
clone()
clone()函式的用途是用來另存一個當前存在的物件。
hashCode()和equale()
- equale()用於確認兩個物件是否相同。
- hashCode()用於獲取物件的雜湊值,這個值的作用是檢索,具體的作用可以參考這裡
- 雜湊值相同的物件不一定equale()
- equale()返回true的兩個物件一定相同。
-
Java中Object類的equals()和hashCode()方法深入解析
1.equals()
在初學Java的時候,很多人會說在比較物件的時候,==是比較地址,equals()是比較物件的內容,誰說的?
看看equals()方法在Object類中的定義:
public boolean equals(Object obj){
return ( this == obj);
}這是比較內容麼?明顯是比較指標(地址)麼...
但是為什麼會有equals是比較內容的這種說法呢?
因為在String、Double等封裝類中,已經重寫(overriding)了Object類的equals()方法,於是有了另一種計算公式,是進行內容的比較。
比如在String類中:
public int hashCode() {
int h = hash;
if (h == 0 ) {
char val[] = value;
int len = count;
for ( int i = 0 ; i < len; i ++ ) {
h = 31 * h + val[off ++ ];
}
hash = h;
}
return h;
}2.hashCode()
在Object類中的定義為:
public native int hashCode();
是一個本地方法,返回的物件的地址值。
但是,同樣的思路,在String等封裝類中對此方法進行了重寫。方法呼叫得到一個計算公式得到的 int值
3.兩者的關係
①兩個obj,如果equals()相等,hashCode()一定相等
②兩個obj,如果hashCode()相等,equals()不一定相等
原因:從雜湊的角度考慮,不同的物件計算雜湊碼的時候,可能引起衝突,大家一定還記得資料結構中衝突的解決方案吧
但是要這麼設計,用兩個函式,個人的理解是為了比較兩個物件時更高效。
可以考慮在Java集合中,判斷兩個物件是否相等的規則是:
第一步,如果hashCode()相等,則檢視第二步,否則不相等;
第二步,檢視equals()是否相等,如果相等,則兩obj相等,否則還是不相等。
為什麼這樣做?個人的理解是讓適當的函式完成適當的功能,畢竟hashCode()比equals()在某種程度上來得快。
toString()和getClass()
toString()返回一個String物件,用來標識自己
getClass()返回一個Class物件,如果列印出來會發現結果是如下格式
class package.name.xxx
- 1
因為返回的是一個class物件,後面可以跟class類的方法。用的是誰的建構函式,那麼getClass返回的就是誰的型別。
getClass()經常用於java反射機制
wait(),wait(long),wait(long,int),notify(),notifyAll()
- 這幾個函式體現的是Java的多執行緒機制
- 在使用的時候要求在synchronize語句中使用
- wait()用於讓當前執行緒失去操作許可權,當前執行緒進入等待序列
- notify()用於隨機通知一個持有物件的鎖的執行緒獲取操作許可權
- notifyAll()用於通知所有持有物件的鎖的執行緒獲取操作許可權
- wait(long) 和wait(long,int)用於設定下一次獲取鎖的距離當前釋放鎖的時間間隔
finalize()
這個函式在進行垃圾回收的時候會用到,匿名物件回收之前會呼叫到,具體的例子如圖所示
相關文章
- Java中Object類的常用方法JavaObject
- Java常用類-Object類JavaObject
- 常用的Java類方法【轉載】Java
- Java中常用類之Object類JavaObject
- Java Object類的各個方法JavaObject
- js中Object那些不常用的方法JSObject
- Javascript Object常用方法總結JavaScriptObject
- Object物件常用方法總結Object物件
- JavaBean重寫Object類中的方法JavaBeanObject
- Object類有哪些公用方法?Object
- Object類和String類equals方法的區別Object
- Object所有類的超類之幾個方法詳析Object
- String類中的equals方法與Object類中的equals方法的不同點Object
- JAVA中object類中toString()方法JavaObject
- Jquery常用類(轉)jQuery
- Java中Scanner類的常用方法Java
- Java面試系列第2篇-Object類中的方法Java面試Object
- object類Object
- JAVASE常用的類及其方法總結Java
- Java中String類的常用方法Java
- 【Java面試題】之Object類中方法詳解Java面試題Object
- json字串與Object、List、Map的互轉工具類JSON字串Object
- JAVA Object類JavaObject
- Flutter工具:Dart中幾種常用的Json轉Object方式FlutterDartJSONObject
- Java之Thread類的常用方法 .sleep()Javathread
- Java中StringBuffer類的常用方法Java
- 類的一些常用魔術方法
- JDom 常用轉換方法 (轉)
- PHP中把stdClass Object轉array的幾個方法PHPObject
- js字串string轉object物件 - 方法篇JS字串Object物件
- js 物件轉為js陣列 && Object方法JS物件陣列Object
- Object類toString()Object
- Object類物件剖析Object物件
- 常用介面分類與模組設計的方法
- Java類方法(定義一個工具類,儲存一些常用的方法)Java
- Object()的方法一覽Object
- LocalDateTime工具類(常用轉換)LDA
- Oracle常用的轉儲方法總結Oracle