问个SB的问题

Float f1 = 1.1f;
Float f2 = 1.1f;
syso(f1 == f2);// false 这是为什么?

4个回答

[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

同上 :)

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐