這兩個代碼片段有什麼區別?Objects.hashCode()和new Object()。hashCode()之間的區別?
片段1:
Object o = new Object();
int i = Objects.hashCode(o);
片段2:
Object o = new Object();
int i = o.hashCode();
這兩個代碼片段有什麼區別?Objects.hashCode()和new Object()。hashCode()之間的區別?
片段1:
Object o = new Object();
int i = Objects.hashCode(o);
片段2:
Object o = new Object();
int i = o.hashCode();
唯一的區別是,如果o爲空,Objects.hashCode(o)
返回0而o.hashCode()
將拋出NullPointerException
。
對象是一個hashCode類,它是一個靜態方法。 – 2013-04-24 08:50:39
@downvoter:請解釋。 – 2013-04-24 08:50:56
@Apurv請參閱[here](http://docs.oracle.com/javase/7/docs/api/java/util/Objects.html)(自1.7開始)。 – Dukeling 2013-04-24 08:52:05
這是怎麼Objects.hashCode()
實現:
public static int hashCode(Object o) {
return o != null ? o.hashCode() : 0;
}
如果o
是null
然後Objects.hashCode(o);
將返回0
,而o.hashCode()
將拋出一個NullPointerException
。
java.util.Objects {
public static int hashCode(Object o) {
return o != null ? o.hashCode() : 0;
}
}
這是一個NPE安全的替代o.hashCode()。
否則沒有區別。
Object o = new Object();
int i = Objects.hashCode(o);
它返回一個非空參數的哈希碼和0爲 空參數。這種情況是Object
轉介o
。它不會丟NullPointerException
。
Object o = new Object();
int i = o.hashCode();
返回o
稱爲所述的Object
hashCode()方法。如果o
是null
,那麼您將得到一個NullPointerException
。
'java.util.Objects'自1.7開始。 – 2013-04-24 08:52:36