java float : == equals compareTo

标签 java equals compareto

我有 2 个问题。

1) 我被告知在比较两个 FloatDouble 数据时,使用 compareTo 而不是 equals .我不知道原因。是否有任何示例说明使用 equals 会导致错误?

2) 看这段代码:

  float f2=(float)1.123450;
  Float f3=new Float(1.123450);

  System.out.println(f3==f2);   // result is true

我认为使用== 意味着两个数据指向相同的内存地址。但是 f3f2 有相同的地址吗? new Float(...) 不会创建一个新空间吗?

最佳答案

如果两个参数都是引用类型,那么 == 将测试内存位置。但是,如果 ==(或 !=)的参数之一是数字,而另一个可转换为数字(使用拆箱),则比较通过比较拆箱后的数值。因此,本例中的比较是基于浮点值(在本例中是相同的)进行的。查看Java Language Specification §15.21.1了解详情。

但是请注意,Float.NaN == Float.NaNfalse

关于java float : == equals compareTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13071256/

相关文章:

java - 如何覆盖 <String, Object> 的两个映射的 equals ?

java - 无法创建特定对象的数组并且无法正确使用compare to方法

java - 如何使用 String.equals 和 String.compareTo 按字母顺序对用户输入的字符串名称进行排序

java - 无法使用 JavaMail API 连接到 Protonmail

java - 根据用户输入的高度JAVA获取对角线或水平线组合的总组合

java - 为什么在 Java 中使用 HashMap 会失败?

java - equals方法中身份测试的必要性

java - SQLite 设置最大行数还是只更新相同的行数?

java - 如何在 Spring ROO 中为复杂(自定义)查找器生成 jspx 和 Controller 文件?

Java HashSet 不会添加两个具有相同 hashCode 和 equals 的对象(OK),但 contains() 表示第二个对象不在集合中