Float f1 = 1.1f;
Float f2 = 1.1f;
syso(f1 == f2);// false 这是为什么?
[code="java"]
Float f1 = 1.1f;
Float f2 = 1.1f;
[/code]
下面是上面这段代码的字节码:
[code="codebyte"]
0: ldc #2; //float 1.1f
2: invokestatic #3; //Method java/lang/Float.valueOf:(F)Ljava/lang/Float
5: astore_1
6: ldc #2; //float 1.1f
8: invokestatic #3; //Method java/lang/Float.valueOf:(F)Ljava/lang/Float
11: astore_2
[/code]
从字节码中可以看得出来,Float f1,f2所指向的引用是通过Float.valueOf(F)这个方法生成的,下面来看一下这个方法的源码就知道了
[code="java"]
public static Float valueOf(String s)
throws NumberFormatException
{
return new Float(FloatingDecimal.readJavaFormatString(s).floatValue());
}
[/code]
每次都是new一个对象出来,而 == 比较的是引用相等性,所以结论也就很明显了。
==判断的是引用 equals判断的是值。用equals就是true
Folat是float基本类型的包装类,以上是两个对象,他们在内存的地址不同,==是比较对象的地址,所以是false
同上 :)