`

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。
该定义使得哈希表得以正确操作。

    public static int compare(float f1, float f2) {
       if (f1 < f2)
            return -1;		 // Neither val is NaN, thisVal is smaller
        if (f1 > f2)
            return 1;		 // Neither val is NaN, thisVal is larger

        int thisBits = Float.floatToIntBits(f1);
        int anotherBits = Float.floatToIntBits(f2);

        return (thisBits == anotherBits ?  0 : // Values are equal
                (thisBits < anotherBits ? -1 : // (-0.0, 0.0) or (!NaN, NaN)
                 1));                          // (0.0, -0.0) or (NaN, !NaN)
    }



此方法认为 Float.NaN 等于其自身,且大于其他所有 float 值(包括 Float.POSITIVE_INFINITY)。
此方法认为 0.0f 大于 -0.0f。
分享到:
评论

相关推荐

    java中equals和==的区别

    Java 中 equals 和 == 的区别 Java 中的 equals 和 == 是两个不同的概念,很多开发者容易混淆它们。理解这两个概念的区别是非常重要的,因为它们对编程的正确性和性能都有很大的影响。 首先,我们需要了解 Java ...

    winform 重写Equals源码

    此外,`Equals`和`GetHashCode`应满足以下契约: - 如果`a.Equals(b)`为`true`,那么`a.GetHashCode()`和`b.GetHashCode()`应该相同。 - 如果`a.Equals(b)`为`false`,那么`a.GetHashCode()`和`b.GetHashCode()`...

    java中equals和==的区别.doc

    Java 中 equals 和 == 的区别 Java 中的 equals 和 == 是两个不同的运算符,它们之间的区别是非常重要的。 首先,我们需要了解 Java 中的内存模型。在 Java 中,变量可以分为两种:基本类型(primitive type)和...

    重写equals和hashcode方法_equals_重写equals和hashcode方法_

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是Object类中的两个核心方法,所有类都默认继承自Object类。这两个方法在处理对象比较和集合操作时起着至关重要的作用。当我们创建自定义类并需要对对象进行精确...

    ==和equals的区别

    基本数据类型共有 8 种,包括四种整数类型(byte、short、int、long)、两种浮点数类型(float、double)、一种字符类型(char)和一种布尔类型(boolean)。除了基本数据类型外,其他类型都是引用数据类型,如...

    C# Equals 和 GetHashCode 方法重写

    ### C# Equals 和 GetHashCode 方法重写 在C#编程中,`Equals` 和 `GetHashCode` 方法是非常重要的成员方法,它们对于确保对象的正确比较以及高效地存储和检索对象至关重要。这两个方法通常需要在自定义类中进行...

    Java语言深入_equals

    3. 如果`o.equals(o1)`和`o.equals(o2)`都返回`true`,那么`o1.equals(o2)`也应该返回`true`(传递性)。 4. 如果`o.equals(o1)`首次返回`true`,在对象未变的情况下,之后的调用也应返回`true`(一致性)。 5. `o....

    hashcode和equals方法

    equals()和hashcode()这两个方法都是从object类中继承过来的。当String 、Math、还有Integer、Double。。。。等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法.

    java中equals()函数的用法 equals和==的区别

    在Java编程语言中,`equals()`方法和`==`运算符是两个经常被用来比较对象是否相等的关键概念。理解它们的区别对于编写出正确、健壮的代码至关重要。 首先,`==`运算符用于基本类型(如int, char, boolean)的比较,...

    ==和equals的比较

    C# 中的 == 和 equals 比较 在 C# 编程语言中,`==` 和 `equals` 是两个常用的比较运算符,但它们之间有很大的区别。 堆和栈的区别 在理解 `==` 和 `equals` 之前,我们需要了解堆和栈的区别。堆是一种动态分配的...

    Java理论与实践:hashCode()和equals()方法

    本文还介绍了定义对象的相等性、实施equals()和hashCode()的需求、编写自己的equals()和hashCode()方法。通过统一定义equals()和hashCode(),可以提升类作为基于散列的集合中的关键字的使用性。

    重写toString和equals方法

    Java 对象的toString和equals方法重写 在 Java 中,每个对象都继承自 Object 类,而 Object 类中定义了两个重要的方法:toString() 和 equals()。这两个方法都是非常重要的,它们分别用于对象的字符串表示和对象...

    关于hashCode()和equals()的本质区别和联系

    hashCode() 和 equals() 的本质区别和联系 Java 中的每个对象都有 hashCode() 和 equals() 方法,这两个方法的正确实现对于 Java 开发人员来说是非常重要的。本文将详细介绍 hashCode() 和 equals() 的本质区别和...

    Java中的==和equals区别

    - 对于字符串和包装类,应优先使用`equals`方法进行比较,以确保得到正确的结果。 理解`==`与`equals`之间的区别对于编写正确且高效的Java代码至关重要。希望本文能帮助您更好地掌握这一概念,并在实际开发中避免...

    hashcode()和equals()

    在Java编程语言中,`hashCode()` 和 `equals()` 方法是两个非常重要的概念,尤其是在处理对象比较和哈希表(如 `HashMap` 或 `HashSet`)时。这两个方法来源于 `Object` 类,是所有Java类的基类,因此,每个自定义类...

    关于equals()方法,jdk源码给出如下五点建议

    关于`equals()`方法,Java开发工具包(JDK)提供了重要的指导原则,这些原则对于理解和正确使用`equals()`至关重要。`equals()`方法主要用于比较对象的内容,而`==`操作符则用于比较对象的引用(即地址)。在Java中...

    知识点 比较运算符==和equals方法的比较

    在Java编程语言中,比较运算符`==`和`equals()`方法是用来检查两个对象是否相等的,但它们之间存在显著的区别。理解这些差异对于编写正确的代码至关重要。 首先,我们来看`==`运算符。它主要用于基本数据类型的比较...

    Java_重写equals()和hashCode()

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象的基本组成部分,它们在很多场景下都发挥着至关重要的作用。这两个方法与对象的相等性比较和哈希表(如HashMap、HashSet)的运作紧密相关。这篇博客将深入...

    equals问题经典

    `equals()`方法的源码通常如下所示: ```java public boolean equals(Object obj) { return (this == obj); } ``` 这是Object类中的默认实现,比较的是对象的引用。但在`String`类中,`equals()`被重写为比较字符...

    重写equals方法

    在采用哈希算法的集合中,hashCode 方法和 equals 方法是紧密相关的。hashCode 方法用于计算对象的哈希值,而 equals 方法用于判断两个对象是否相等。如果两个对象的哈希值相同,那么它们也应该是相等的,反之亦然。...

Global site tag (gtag.js) - Google Analytics