测试两个原始包装数字是否代表相等的原始数

时间:2015-06-27 12:55:58

标签: java numbers wrapper equality primitive

我正在寻找一种可靠的方法来测试两个原始包装器Numbers(例如IntegerFloatDouble等)是否代表相等的原始数字。

例如,以下涉及两个原始数字的if语句会产生true

int i = 100;
double d = 100d;
if (i == d) {
    System.out.println("equal");
}

但是以下if语句当然是false,因为Number个实例属于不同的类(IntegerDouble):

int i = 100;
double d = 100d;
Number n1 = i;
Number n2 = d;
if (n1.equals(n2)) {
    System.out.println("equal");
}

是否存在一些可重复的通用测试,如果Number的两个实例(我知道它们是原始包装器)在它们的原始值相等的意义上是相等的吗?在相同的上下文中:是否有一些可靠的通用测试,以查看Number的实例如何与其他条件运算符!= ><,{{1 }和>=

现在我找到了以下解决方案,但我不确定这是否真的可靠:

<=

1 个答案:

答案 0 :(得分:1)

那很难看。

如果我获得了这项任务,如果我找不到一个图书馆为我做这件事(我不知道任何这样的图书馆在我的头顶),那么我会写一些丑陋的代码:

我会使用反射来获取两个数字的类型,然后我会在表格中查找哪些可以转换为其他类型。

然后做演员,

然后比较。

您的解决方案,将所有内容都加倍,适用于大多数情况,但它不适用于比较大于约2 ^ 56的long值。 double数据类型的精度不足以表示大于该值的所有long值。