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

标签 java numbers wrapper equality primitive

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

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

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

但是下面的if语句当然是falseNumber实例属于不同的类(IntegerDouble):

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/

相关文章:

java - 如何部分解析 XML(仅 1 层深)

containers - 容器和包装器的区别

oracle10g - 在 PostgreSQL 中显示链接服务器

c# - 使用 C++/CLI 而不是 C# 来包装(第三方)C 库 (dll) 有什么优势?

javascript - JS从字符串中解析出错误的数字

java - 错误导致程序即使在程序关闭后仍继续运行

java - 覆盖 getPreferredSize() 会破坏 LSP

java - GZIP解压代码抛出异常

java - 如何显示整个 double 值?

java - 从字符串中提取数字和运算符