文字比较和变量比较有什么区别

时间:2013-06-06 11:10:30

标签: java

之间有什么区别
    Float f1 = 120.0f;
Float f2 = 120.00f;

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

这里我得到Equal作为输出      和

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

在这里,我的输出不平等。 文字比较和变量比较之间有什么区别

5 个答案:

答案 0 :(得分:5)

你称之为“变量比较”的东西就是变量值的比较。在您的情况下,您的变量是对象,因此您要比较它们的引用,即内存中对象的地址。对于两个不同的对象,这个地址也会有所不同。

答案 1 :(得分:5)

在第一个实例中,java将f1与实际数字120.00f进行比较。在第二个实例中,java正在比较内存引用。即使f1和f2保持相同的值,它们也存储在存储器中的不同位置,因此彼此完全分离。因此,当您键入if(f1 == f2)时,java会检查数据中存储在f1的信息,并检查f2是否指向此完全相同的信息位。

答案 2 :(得分:4)

区别在于数据类型。

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

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

答案 3 :(得分:2)

这是自动拳击的副作用。你的谚语     浮点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 val == f2 val:true

     

等于

     

不等于

     

等于

答案 4 :(得分:0)

使用java.lang.Float.compare(float1,float2)。