天天看點

Float源碼淺析equals和compare

public boolean equals(Object obj) {
	return (obj instanceof Float)
	       && (floatToIntBits(((Float)obj).value) == floatToIntBits(value));
    }
           

将此對象與指定對象進行比較。當且僅當參數不是 null 而是 Float 對象,且表示的 float 值與此對象表示的 float 值相同時,結果為 true。為此,當且僅當将方法 #floatToLongBits(double) 應用于兩個值所傳回的 int 值相同時,才認為這兩個 float 值相同。

注意,在大多數情況下,對于 Float 類的兩個執行個體 f1 和 f2,當且僅當

f1.floatValue() == f2.floatValue()

的值為 true 時,f1.equals(f2) 的值才為 true。但是,有以下兩種例外情況:

如果 f1 和 f2 都表示 Float.NaN,那麼即使 Float.NaN==Float.NaN 的值為 false,equals 方法也将傳回 true。

如果 f1 表示 +0.0f,而 f2 表示 -0.0f,或相反,那麼即使 0.0f==-0.0f 的值為 true,equal 測試也将傳回 false。

該定義使得哈希表得以正确操作。

此方法認為 Float.NaN 等于其自身,且大于其他所有 float 值(包括 Float.POSITIVE_INFINITY)。

此方法認為 0.0f 大于 -0.0f。