说明: 任何数值类型,包括浮点数,0前面带个+号,表示正零,它和没+号的0完全相等。
但是0前面带个减号(-),表示负零,它和正零相等吗?下面的代码,分别对byte,short,int,long,float,double的-0和+0比较:
System.out.println("Byte: " + Byte.compare((byte) -0, (byte) +0)); System.out.println("Short: " + Short.compare((short) -0, (short) +0)); System.out.println("Intger: " + Integer.compare(-0, +0)); System.out.println("Long: " + Long.compare(-0, +0)); System.out.println("Float: " + Float.compare(-0f, +0f)); System.out.println("Double: " + Double.compare(-0d, +0d));
Print输出:
Byte: 0 Short: 0 Intger: 0 Long: 0 Float: -1 Double: -1
结果显示,byte,short,int,long的-0与+0相等,然而float和double的-0小于+0。这点在构造range时,[0.0, –0.0],意思表示只能取0,但是逻辑上是错的,因为左边比右边大,例如调用com.google.common.collect.Range.closed(0.0, -0.0)构造Range就会抛IllegalArgumentException。