相关疑难解决方法(0)

为什么java.lang.Number没有实现Comparable?

有谁知道为什么 java.lang.Number不实施Comparable?这意味着你无法排序Numbers的Collections.sort这对我来说有点陌生.

发布讨论更新:

感谢所有有用的回复.我最后对这个话题进行了更多的研究.

java.lang.Number未实现Comparable的原因的最简单解释源于可变性问题.

对于位的检讨,java.lang.Number是抽象的超类型的AtomicInteger,AtomicLong,BigDecimal,BigInteger,Byte,Double,Float,Integer,LongShort.在那个列表上,AtomicIntegerAtomicLong没有实现Comparable.

四处搜索,我发现Comparable在可变类型上实现这不是一个好习惯,因为对象在比较期间或之后可能会发生变化,因此比较结果无用.这两个AtomicLongAtomicInteger是可变的.API设计者已经预见到没有Number实现,Comparable因为它会限制未来子类型的实现.确实,AtomicLong并且AtomicIntegerjava.lang.Number最初实现之后很久就被添加到Java 1.5中.

除了可变性之外,这里也可能有其他考虑因素.一compareTo实施Number就必须促进所有的数字值BigDecimal,因为它是能够容纳所有的Number子类型.这种促销在数学和表现方面的含义对我来说有点不清楚,但我的直觉发现了解决方案.

java sorting comparable

132
推荐指数
4
解决办法
3万
查看次数

比较Java中的数字

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

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

我担心双重2.00000不等于int 2的情况.这些是由内置等于处理吗?如果没有,有没有办法在java中编写一个简单的数字比较函数?(apache commons等外部库都可以)

java comparison numbers

20
推荐指数
3
解决办法
7万
查看次数

如何在Java中比较两个数字?

可能重复:
比较两个通用数字的值

我想比较两个任意的Number实例来找出哪个更大.如您所知,这些可能是整数,长整数或双数,但也可能是BigIntegers或BigDecimals.那么该怎么办?

  1. Number没有实现Comparable.
  2. 无法使用,doubleValue()因为BigDecimals或BigIntegers可能会丢失精度.

我真的必须进行实例测试和投射吗?这里必须有一些库,做到这一点.但我已经检查过Apache Commons和Guava没有运气.

编辑1:评论指出了这一点:比较两个通用数字的值.它有一个解决方案,使用将所有内容转换为BigDecimal toString().真的没有更好的方法吗?

编辑2:我刚发布了自己的版本作为另一个问题的答案.它应该比公认的答案更有效和更强大.

java compare numbers

20
推荐指数
2
解决办法
3万
查看次数

标签 统计

java ×3

numbers ×2

comparable ×1

compare ×1

comparison ×1

sorting ×1