我正在寻找一种可靠的方法来测试两个原始包装器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
的实例如何与其他条件运算符!=
>
,<
,{{1 }和>=
?
现在我找到了以下解决方案,但我不确定这是否真的可靠:
<=
答案 0 :(得分:1)
那很难看。
如果我获得了这项任务,如果我找不到一个图书馆为我做这件事(我不知道任何这样的图书馆在我的头顶),那么我会写一些丑陋的代码:
我会使用反射来获取两个数字的类型,然后我会在表格中查找哪些可以转换为其他类型。
然后做演员,
然后比较。
您的解决方案,将所有内容都加倍,适用于大多数情况,但它不适用于比较大于约2 ^ 56的long
值。 double
数据类型的精度不足以表示大于该值的所有long
值。