我正在寻找一种可靠的方法来测试两个原始包装器是否 Numbers
(例如 Integer
、 Float
、 Double
等)表示相等的原始数。
例如,以下涉及两个原始数字的 if 语句会产生 true
:
int i = 100;
double d = 100d;
if (i == d) {
System.out.println("equal");
}
但是下面的if语句当然是false
自 Number
实例属于不同的类(Integer
和 Double
):
int i = 100;
double d = 100d;
Number n1 = i;
Number n2 = d;
if (n1.equals(n2)) {
System.out.println("equal");
}
是否有一些可靠的通用测试可以查看,如果 Number
的两个实例(我知道其中是原始包装器)在它们的原始值相等的意义上是相等的吗?在相同的上下文中:是否有一些可靠的通用测试来查看 Number
的实例与其他条件运算符相互比较 !=
>
, <
, >=
和 <=
?
现在我得出了以下解决方案,但我不确定这是否真的可靠:
int i = 100;
double d = 100d;
Number n1 = i;
Number n2 = d;
if (n1.doubleValue() == n2.doubleValue()) {
System.out.println("equal");
}
最佳答案
太丑了
如果我被分配了那个任务,并且如果我找不到一个库来为我做这件事(我不知道有任何这样的库),那么我会写一些丑陋的代码:
我会使用反射来获取两个数字的类型,然后我会在表中查找以查找其中哪些可以转换为另一个的类型。
然后做 Actor ,
然后比较。
您的解决方案(将所有内容都转换为 double )适用于大多数情况,但不适用于比较大于 2^56 的 long
值。 double
数据类型没有足够的精度来表示所有大于该值的 long
值。
关于java - 测试两个原始包装数字是否代表相等的原始数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31089021/