繁体   English   中英

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

[英]What is difference between literal comparison and variable comparison

有什么区别

    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");

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

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

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

不同之处在于数据类型。

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

在第二个例子中,你要比较的类的实例Float与另一个类的实例Float 在这种情况下,不会发生这样的转换,当使用带有两个对象的== ,它会比较它们的引用,看它们是否是完全相同的对象 它说它们不相等,因为它们不是 - 它们是两个不同的对象,它们碰巧具有相同的价值。

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

等于

不平等

等于

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM