3

和有什么区别

    Float f1 = 120.0f;
Float f2 = 120.00f;

if(f1==120.00f)
{
    System.out.println("Equal");
}
     else
    System.out.println("Not Equal");

在这里我得到等于输出和

    if(f1==f2)
{
    System.out.println("Equal");
}
    else
    System.out.println("Not Equal");

在这里,我变得不等于输出。文字比较和变量比较有什么区别

4

5 回答 5

5

在第一个实例中,java 将 f1 与实际数字 120.00f 进行比较。在第二个实例中,java 正在比较内存引用。尽管 f1 和 f2 具有相同的值,但它们存储在内存中的不同位置,因此彼此完全分开。因此,当您键入 if(f1==f2) 时,java 会检查存储在 f1 中的信息,并检查 f2 是否引用了完全相同的信息位。

于 2013-06-06T11:19:47.187 回答
5

你所谓的“变量比较”就是变量值的比较。在您的情况下,您的变量是对象,因此您正在比较它们的引用,即内存中对象的地址。对于两个不同的对象,此地址也将不同。

于 2013-06-06T11:13:23.817 回答
4

区别在于数据类型。

在第一个示例中,您将类的实例与Float原语进行比较float。在这种情况下,Float对象被拆箱以获得另一个原语float,并将这两个进行比较。当==与两个原语一起使用时,它会比较它们的值,这就是为什么它说它们相等(因为它们是相等的)。

在第二个示例中,您将 class 的一个实例与 classFloat的另一个实例进行比较Float。在这种情况下,不会发生这种转换,并且当==与两个对象一起使用时,它会比较它们的引用以查看它们是否完全相同 object。它说它们不相等,因为它们不是 - 它们是两个不同的对象,它们恰好具有相同的值。

于 2013-06-06T11:22:29.070 回答
2

这是自动装箱的副作用。你的说法 Float f1 = 120.0f;

但编译器使它成为 Float f1 = new Float(120.0f);

现在比较

(f1==120.00f) 将 f1 更改为浮点数(不知道为什么,但这就是正在发生的事情。其中 f1==f2 是对象比较并且由于它们引用不同的对象而失败。请参阅此代码:

public static void main(String[] args) {
    Float f1 = new Float(120.0f);
    Float f2 = new Float(120.00f);
    System.out.println("f1 " + f1.floatValue() + ", f2 " + f2.floatValue());
    System.out.println("f1 val == f2 val :" + (f1.floatValue() == f2.floatValue()));
    if(f1==120.00f)
    {
        System.out.println("Equal");
    }
         else
        System.out.println("Not Equal");



        if(f1==f2)
    {
        System.out.println("Equal");
    }
        else
        System.out.println("Not Equal");

        if(120f==f2)
        {
            System.out.println("Equal");
        }
            else
            System.out.println("Not Equal");    

}

得到

f1 120.0,

f2 120.0

f1 值 == f2 值:真

平等的

不相等

平等的

于 2013-06-06T11:21:10.833 回答
0

use java.lang.Float.compare(float1, float2).

于 2013-06-06T12:03:20.543 回答