值得一提的是以下表达式:
new Long(10).equals(new Integer(10))
始终是
false,这往往会使每个人在某个时候绊倒。因此,您不仅不能比较任意
Numbers,而且甚至无法确定它们是否相等。
另外,在实原语类型(
float,
double),确定是否两个值相等是棘手的,并且必须在可接受的误差容限内完成。尝试如下代码:
double d1 = 1.0d;double d2 = 0.0d;for (int i=0; i<10; i++) { d2 += 0.1d;}System.out.println(d2 - d1);这样您就会有一些小的差异。
回到制作问题
Number
Comparable。您将如何实施?使用类似的东西
doublevalue()不会可靠地做到这一点。请记住,
Number子类型为:
Byte
;Short
;Integer
;Long
;AtomicInteger
;AtomicLong
;Float
;Double
;BigInteger
; 和BigDecimal
。
您能否编写一个
compareTo()不会分解为一系列if instanceof语句的可靠方法?
Number实例只有六个可用方法:
bytevalue()
;shortValue()
;intValue()
;longValue()
;floatValue()
; 和doublevalue()
。
因此,我想Sun做出了(合理的)决定,即
Numbers仅
Comparable针对自己的实例。



