之间有什么区别
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");
在这里,我的输出不平等。 文字比较和变量比较之间有什么区别
答案 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)。