我有 2 个问题。
1) 我被告知在比较两个 Float
或 Double
数据时,使用 compareTo
而不是 equals
.我不知道原因。是否有任何示例说明使用 equals
会导致错误?
2) 看这段代码:
float f2=(float)1.123450;
Float f3=new Float(1.123450);
System.out.println(f3==f2); // result is true
我认为使用==
意味着两个数据指向相同的内存地址。但是 f3
和 f2
有相同的地址吗? new Float(...)
不会创建一个新空间吗?
最佳答案
如果两个参数都是引用类型,那么 ==
将测试内存位置。但是,如果 ==
(或 !=
)的参数之一是数字,而另一个可转换为数字(使用拆箱),则比较通过比较拆箱后的数值。因此,本例中的比较是基于浮点值(在本例中是相同的)进行的。查看Java Language Specification §15.21.1了解详情。
但是请注意,Float.NaN == Float.NaN
是 false
。
关于java float : == equals compareTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13071256/