当前位置: 首页 > 面试题库 >

用Java比较数字

段干德泽
2023-03-14
问题内容

在Java中,所有数字类型都从java.lang.Number扩展。拥有如下所示的方法是否是一个好主意:

public boolean areEqual(Number first, Number second) {
    if (first != null && second != null) {
        return first.equals(second);
    }
}

我担心双精度2.00000不等于int2的情况。这些是否由内置的equals处理?如果没有,有什么办法可以在Java中编写一个简单的数字比较功能?(可以使用apachecommons这样的外部库)


问题答案:

一个Double 从来没有 equalsInteger。此外,a double与a不同Double

Java具有原始类型和引用类型。Java中的真正数字类型不是从扩展的Number,因为它们是基元。

您可能需要考虑不使用类型混合的系统,因为这通常会给隐式/显式转换带来很多麻烦,可能会/可能不会丢失信息,等等。

相关问题

intvs Integer

  • Java / C#中的int和Integer有什么区别?
  • Java是否完全面向对象

Number对比:

  • 为什么不java.lang.Number执行Comparable?
  • 比较两个通用数字的值

也可以看看

  • Java语言指南/自动装箱
  • JLS 4.2 4.2基本类型和值

数值类型
是整型和浮点类型。积分类型有byteshortint,和longchar。浮点类型为floatdouble

关于混合型计算

混合类型计算是 Java Puzzlers 中至少四个难题的主题。

以下是各种摘录:

daccess-ods.un.org daccess-ods.un.org通常最好避免使用混合类型的计算,因为它们固有地使人感到困惑。daccess-
ods.un.org daccess-ods.un.org
混合类型的比较总是令人困惑,因为系统被迫提升一个操作数以匹配另一个操作数的类型。转换是不可见的,可能不会产生您期望的结果

处方 :避免将整数和浮点类型混合使用的计算。优先选择整数算法而不是浮点数。



 类似资料:
  • 我的任务是用java编写mergesort,任务还规定我不能使用整数,我必须使用可比较的整数。这是我第一次使用java。我的问题是在合并函数内比较两个comp int数组中的元素。我尝试了if(list[I])compareTo(list2[j]),但compareTo只能取整数。任何帮助都将不胜感激

  • 问题内容: 在Java中工作,假设我有两个对象,这要归功于,我知道它们都是数组。进一步说,我想将这两个数组相互比较- 可能使用。有没有一种优雅的方法可以做到这一点,而无需借助详尽的if / else树来弄清楚需要使用哪种口味?我正在寻找比这更令人讨厌的东西: 问题答案: 您可以使用反射。 反射仅用于在运行时找到正确的方法,而不会引起您的回避。实际方法应该运行得很快。 显然,生产版本需要更强大的异常

  • 数组相等的条件不仅要求数组元素的个数必须相等,而且要求对应位置的元素也相等。Arrays 类提供了 equals() 方法比较整个数组。语法如下: 其中,arrayA 是用于比较的第一个数组,arrayB 是用于比较的第二个数组。 例 1 下面代码演示 Arrays 类的 equals() 方法的使用。 上述代码中定义 3 个数组,分别为 score1、score2 和 score3。第一个数组直

  • 编辑问题以包括所需的行为、特定问题或错误,以及再现问题所需的最短代码。这将帮助其他人回答这个问题。 我的任务是用java编写mergesort,任务还规定我不能使用整数,我必须使用可比较的整数。这是我第一次使用java。我的问题是在合并函数内比较两个comp int数组中的元素。我尝试了if(list[I])compareTo(list2[j]),但compareTo只能取整数。任何帮助都将不胜感

  • 问题内容: 我听说散列(即将字符串或对象转换为数字)用于字符串等,因为比较数字比字符串更容易。如果为真,这是什么原因? 问题答案: 不一定是这种情况,但大多数时候可能是这样。 请考虑以下情况: 我想比较字符串“ apples”和“ oranges”。如果我只想确定“ apples” ==“ oranges”,我只需要比较每个字符串的第一个字符:’a’!=’o’=>“ apples”!=“ oran

  • 问题内容: 在Java中整数比较是棘手的,因为和表现不同。我明白了。 但是,如本示例程序所示, (第4行)的 行为不同于 (第3行) 。为什么是这样?? 结果 问题答案: 从JLS 如果装箱的值p为true,false,字节或\ u0000到\ u007f范围内的char或-128到127(含)之间的整数或短数,则令r1和r2为p的任何两次拳击转换。r1 == r2总是这样。 理想情况下,将给定的